/// <summary> /// Installs the windows service. It uses InstallUtil.exe to complete the actual installation/uninstallation. /// During the run for the InstallUtil.exe console window is hidden. /// If any error occurred the console output is captured and embedded into the raised Exception object. /// </summary> /// <param name="serviceFile">The service file.</param> /// <param name="isInstalling">if set to <c>true</c> [is installing].</param> /// <returns></returns> /// <exception cref="System.Exception"></exception> static public string InstallService(string serviceFile, bool isInstalling) { var util = new ExternalTool { ExePath = IO.Path.Combine(LatestFrameworkDirectory, "InstallUtil.exe"), Arguments = string.Format("{1} \"{0}\"", serviceFile, isInstalling ? "" : "/u") }; var buf = new StringBuilder(); int retval = util.ConsoleRun(line => buf.AppendLine(line)); string output = buf.ToString(); string logoLastLine = "Microsoft Corporation. All rights reserved."; int pos = output.IndexOf(logoLastLine); if (pos != -1) output = output.Substring(pos + logoLastLine.Length).Trim(); if (retval != 0) throw new Exception(output); return output; }
static string ServiceDo(string action, string service, bool throwOnError) { var util = new ExternalTool { ExePath = "sc.exe", Arguments = action + " \"" + service + "\"" }; var buf = new StringBuilder(); int retval = util.ConsoleRun(line => buf.AppendLine(line)); if (retval != 0 && throwOnError) throw new Exception(buf.ToString()); return buf.ToString(); }
/// <summary> /// Applies digital signature to a file (e.g. msi, exe, dll) with MS <c>SignTool.exe</c> utility. /// </summary> /// <param name="fileToSign">The file to sign.</param> /// <param name="pfxFile">Specify the signing certificate in a file. If this file is a PFX with a password, the password may be supplied /// with the <c>password</c> parameter.</param> /// <param name="timeURL">The timestamp server's URL. If this option is not present (pass to null), the signed file will not be timestamped. /// A warning is generated if timestamping fails.</param> /// <param name="password">The password to use when opening the PFX file. Should be <c>null</c> if no password required.</param> /// <param name="optionalArguments">Extra arguments to pass to the <c>SignTool.exe</c> utility.</param> /// <param name="wellKnownLocations">The optional ';' separated list of directories where SignTool.exe can be located. /// If this parameter is not specified WixSharp will try to locate the SignTool in the built-in well-known locations (system PATH)</param> /// <returns>Exit code of the <c>SignTool.exe</c> process.</returns> /// /// <example>The following is an example of signing <c>Setup.msi</c> file. /// <code> /// WixSharp.CommonTasks.Tasks.DigitalySign( /// "Setup.msi", /// "MyCert.pfx", /// "http://timestamp.verisign.com/scripts/timstamp.dll", /// "MyPassword", /// null); /// </code> /// </example> static public int DigitalySign(string fileToSign, string pfxFile, string timeURL, string password, string optionalArguments = null, string wellKnownLocations = null) { //"C:\Program Files\\Microsoft SDKs\Windows\v6.0A\bin\signtool.exe" sign /f "pfxFile" /p password /v "fileToSign" /t timeURL //string args = "sign /v /f \"" + pfxFile + "\" \"" + fileToSign + "\""; string args = "sign /v /f \"" + pfxFile + "\""; if (timeURL != null) args += " /t \"" + timeURL + "\""; if (password != null) args += " /p \"" + password + "\""; if (!optionalArguments.IsEmpty()) args += " " + optionalArguments; args += " \"" + fileToSign + "\""; var tool = new ExternalTool { WellKnownLocations = wellKnownLocations ?? @"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin", ExePath = "signtool.exe", Arguments = args }; return tool.ConsoleRun(); }