我有一个用C#编写的标准.NET Windows服务。
是否可以在不使用InstallUtil的情况下自行安装?我应该使用服务安装程序类吗?我应该如何使用它?
我希望能够拨打以下电话:
MyService.exe -install
它与调用具有相同的效果:
InstallUtil MyService.exe
是的,这是完全可能的(即我完全可以做到);您只需要引用正确的dll(System.ServiceProcess.dll)并添加安装程序类即可。
这是一个例子:
[RunInstaller(true)] public sealed class MyServiceInstallerProcess : ServiceProcessInstaller { public MyServiceInstallerProcess() { this.Account = ServiceAccount.NetworkService; } } [RunInstaller(true)] public sealed class MyServiceInstaller : ServiceInstaller { public MyServiceInstaller() { this.Description = "Service Description"; this.DisplayName = "Service Name"; this.ServiceName = "ServiceName"; this.StartType = System.ServiceProcess.ServiceStartMode.Automatic; } } static void Install(bool undo, string[] args) { try { Console.WriteLine(undo ? "uninstalling" : "installing"); using (AssemblyInstaller inst = new AssemblyInstaller(typeof(Program).Assembly, args)) { IDictionary state = new Hashtable(); inst.UseNewContext = true; try { if (undo) { inst.Uninstall(state); } else { inst.Install(state); inst.Commit(state); } } catch { try { inst.Rollback(state); } catch { } throw; } } } catch (Exception ex) { Console.Error.WriteLine(ex.Message); } }