问题:windows服务安装时,出错:System.ComponentModel.Win32Exception: 帐户名无效或不存在,
解决:将serviceProcessInstaller1->Accout属性,设为:LocalSystem(默认是User)。
运行: Installuitl 程序名.exe ,安装成功。
卸载是 Installuitl /u 程序名.exe
问题:如何不使用InstallUtil 安装 启动 停止 卸载 Windows服务?
解决:用System.Configuration.Install.AssemblyInstaller类加载一个程序集,并运行其中的安装程序。
[C#] //安装服务 public static void InstallService(string filepath, string serviceName, string[] options) { try { if (!IsServiceExisted(serviceName)) { IDictionary mySavedState = new Hashtable(); AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path = filepath; myAssemblyInstaller.CommandLine = options; myAssemblyInstaller.Install(mySavedState); myAssemblyInstaller.Commit(mySavedState); myAssemblyInstaller.Dispose(); } } catch (Exception ex) { throw new Exception("Install Service Error\n" + ex.Message); } } //卸载服务 public static void UnInstallService(string filepath, string serviceName, string[] options) { try { if (IsServiceExisted(serviceName)) { AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path = filepath; myAssemblyInstaller.CommandLine = options; myAssemblyInstaller.Uninstall(null); myAssemblyInstaller.Dispose(); } } catch (Exception ex) { throw new Exception("UnInstall Service Error\n" + ex.Message); } } //判断服务是否存在 public static bool IsServiceExisted(string serviceName) { ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) { if (s.ServiceName == serviceName) { return true; } } return false; } //启动服务 public static void StartService(string serviceName) { if (IsServiceExisted(serviceName)) { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) { service.Start(); service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(60)); } } } //停止服务 public static void StopService(string serviceName) { if (IsServiceExisted(serviceName)) { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running) { service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(60)); } } }