SC.exe 和 InstallUtil 都安装/卸载Windows服务。但它们似乎没有同样的方式。
有什么区别?
例如 InstallUtil 失败(某些文件或依赖项未找到错误),而 Sc create 则愉快地安装该服务。太陌生了;如果我在控制台中运行 net start ,则不会显示该服务。但它确实出现在服务GUI中。 当我尝试卸载时会发生这种变化。
我自己编写了这个服务,早期版本也可以。 Dotnet3.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创建可执行文件使您可以对整个安装/卸载过程进行编程控制。例如,ServiceInstaller和ServiceProcessInstaller用于服务安装。
'钪'实用程序用于服务控制和创建'命令将根据所选的可执行文件创建服务。
在你的例子中
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键入大量参数。