用SC.exe或InstallUtil.exe安装Windows服务 - 有区别但是哪个?

时间:2011-01-14 14:46:32

标签: .net windows-services installutil

SC.exe InstallUtil 都安装/卸载Windows服务。但它们似乎没有同样的方式。

有什么区别?


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

我自己编写了这个服务,早期版本也可以。 Dotnet3.5。

5 个答案:

答案 0 :(得分:27)

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

Sc.exe也可以使用提供的命令行参数编写这些键。然而,这不是正确的方法。 InstallUtil.exe的意思是它可以激活自定义安装代码。服务作者编写的代码。这并不罕见,服务倾向于在他们的注册密钥中填充配置信息供自己使用。当你看一下Regedit时,你会看到很多证据。

答案 1 :(得分:13)

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

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

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

这就是我根本不使用InstallUtil.exe的原因。此外,由于之前的响应:您需要它在您的部署包中。 sc.exe已经在任何Windows XP及以上版本中(我相信)。

答案 2 :(得分:5)

主要区别在于 InstallUtil 不是用于服务安装的实用程序,而是作为常规安装程序工具。在MSDN页面中,您可以看到:

  

"安装程序工具是一个允许您使用的命令行实用程序   通过执行安装程序来安装和卸载服务器资源   指定程序集中的组件。此工具可以协同工作   使用System.Configuration.Install命名空间中的类。"

因此它可以安装服务,但它有许多其他好处。基于Installer Class创建可执行文件使您可以对整个安装/卸载过程进行编程控制。例如,ServiceInstallerServiceProcessInstaller用于服务安装。

'钪'实用程序用于服务控制和创建'命令将根据所选的可执行文件创建服务。

在你的例子中  1.它不应与 InstallUtil 一起安装,错误响应应该非常清楚。
 2. InstallUtil 因安装代码中的错误并使用 sc而失败     创建可能会为您创建错误的服务。检查 {exe_name} .InstallLog 以获取详细信息。

答案 3 :(得分:2)

从卸载使用体验: Windows 7下的sc.exe立即从列表中删除条目,而在使用installutil卸载后需要重新启动

答案 4 :(得分:1)

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

不幸的是,对于OP,TopShelf在提问时并不存在。它解决了SC和InstallUtil的缺点,并允许服务在Visual Studio中启动时附加调试器启动。另外,键入while playerselection not in warriortype: 要比向下钻取到InstallUtil的特定文件夹要容易得多,或者为SC键入大量参数。