在没有InstallUtil.exe的情况下安装.NET Windows服务

我有一个用C#编写的标准.NET Windows服务。


是否可以在不使用InstallUtil的情况下自行安装?我应该使用服务安装程序类吗?我应该如何使用它?


我希望能够拨打以下电话:


MyService.exe -install

它与调用具有相同的效果:


InstallUtil MyService.exe


心有法竹
浏览 628回答 3
3回答

繁花不似锦

尽管涉及的工作量是不平凡的,但您总是可以退回到旧的WinAPI调用中。不需要通过支持.NET的机制来安装.NET服务。安装:通过打开服务管理器OpenSCManager。致电CreateService注册服务。(可选)调用ChangeServiceConfig2以设置描述。关闭服务,并使用来关闭服务管理器句柄CloseServiceHandle。卸载:通过打开服务管理器OpenSCManager。使用打开服务OpenService。通过调用DeleteService返回的句柄来删除服务OpenService。关闭服务,并使用来关闭服务管理器句柄CloseServiceHandle。与使用ServiceInstaller/相比ServiceProcessInstaller,我更喜欢这样做的主要原因是您可以使用自己的自定义命令行参数注册服务。例如,您可以将其注册为"MyApp.exe -service",然后如果用户在没有任何参数的情况下运行您的应用,则可以为他们提供一个UI以安装/删除该服务。运行Reflector ServiceInstaller可以填写此简要说明中缺少的详细信息。PS显然,这不会具有与调用:InstallUtil MyService.exe相同的效果-特别是,您将无法使用InstallUtil进行卸载。但这似乎并不是对您的严格要求。
打开App,查看更多内容
随时随地看视频慕课网APP