首页 文章

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

提问于
浏览
43

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

有什么不同?


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

我自己写了这个服务,早期的版本工作 . Dotnet3.5 .

5 回答

  • 27

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

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

  • 2

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

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

    这使得很难同时在同一台机器上运行同一服务的两个版本 .

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

  • 1

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

    “安装程序工具是一个命令行实用程序,允许您通过执行指定程序集中的安装程序组件来安装和卸载服务器资源 . 此工具与System.Configuration.Install命名空间中的类一起使用 . ”

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

    'Sc'实用程序用于服务控制,'create'命令将根据所选的可执行文件创建服务 .

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

  • 5

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

  • 13

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

    不幸的是,对于OP来说,输入 myservice install 要比向下钻取到InstallUtil的特定文件夹要容易得多,或者输入大量的SC参数 .

相关问题