50

SC.exeInstallUtil都安装/卸载 Windows 服务。但它们的工作方式似乎不同。

有什么区别?


例如,当Sc create愉快地安装服务时, InstallUtil失败(找不到某些文件或依赖项错误) 。太增加了陌生感;如果我在控制台中运行net start ,该服务不会显示。但它确实显示在服务 GUI 中。当我尝试卸载时会发生这种情况。

我自己编写了该服务,早期版本也可以使用。点网3.5。

4

5 回答 5

28

是的,安装服务并不是特别复杂。它只需要编写一些注册表项。您可以使用 Regedit.exe 进行查看,导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services。

Sc.exe 也可以使用提供的命令行参数编写这些密钥。然而,这不是正确的方法。InstallUtil.exe 的重点是它可以激活自定义安装代码。服务作者编写的代码。这并不少见,服务倾向于在其注册密钥中填充配置信息以供自己使用。当您查看 Regedit 时,您会看到大量的证据。

于 2011-01-14T17:52:39.333 回答
16

我更喜欢 sc.exe 而不是 installutil.exe。

InstallUtil 强制您添加可怕的 ProjectInstaller 类(我相信)并在那里硬编码服务名称和服务描述。

InstallUtil 使得将同一服务的两个版本同时运行在同一台机器上变得非常困难。

这就是我根本不使用 InstallUtil.exe 的原因。也因为之前的回复:您需要它在您的部署包中。sc.exe 已经在任何 Windows Xp 及更高版本中(我相信)。

于 2012-09-28T16:27:17.923 回答
5

Main difference is that InstallUtil is not utility meant for service installation but as general installer tool. From MSDN pages you can see that:

"The Installer tool is a command-line utility that allows you to install and uninstall server resources by executing the installer components in specified assemblies. This tool works in conjunction with classes in the System.Configuration.Install namespace."

So it can install service but it has many many many other benefits. Creating executables based on Installer Class gives you programatic control of whole installation/uninstallation procedure. ServiceInstaller and ServiceProcessInstaller, for instance, are used for service installation.

'Sc' utility is used for service control and 'create' command will just create service based on chosen executable.

In your example
1. It is not meant to be installed with InstallUtil and error response should be quite clear about it.
2. InstallUtil fails because of a bug in installation code and using sc create will probably create a faulty service for you. Check into {exe_name}.InstallLog for details.

于 2014-04-24T11:08:26.930 回答
2

From the uninstall usage experience: sc.exe under windows 7 removes the entry from the list immediately, while after uninstalling with installutil there is a need for restart

于 2011-10-25T09:14:15.437 回答
2

虽然 InstallUtil 是使用 .NET 服务的首选方式,但它的缺点之一是它不会从您的 app.config 中获取绑定重定向,这在某些情况下可能会导致安装失败。这就是使用 SC 可能会为您带来一些好处的地方,但代价是无法在安装时运行代码。

不幸的是,对于 OP,TopShelf在他提出问题时并不存在。它解决了 SC 和 InstallUtil 的缺点,并允许服务在 Visual Studio 中启动时使用附加的调试器启动。myservice install此外,与深入到 InstallUtil 的特定文件夹或为 SC 输入大量参数相比,键入要容易得多。

于 2018-02-08T22:51:39.610 回答