【问题标题】:What launches the installation of a Windows Service Installer?什么会启动 Windows 服务安装程序的安装?
【发布时间】:2018-09-21 12:05:35
【问题描述】:

我使用Microsoft's walkthrough 创建了一个服务。

它有效。但我不明白怎么做。 Main() 方法似乎没有调用 ProjectInstaller 构造函数(看起来像是安装服务的内容)。事实上,ProjectInstaller 在解决方案中的任何地方都没有被引用(我使用 Shift+F12 进行了检查)。

那么它是如何执行的呢?

编辑

我没有使用 installutil。 Program 的Main() 调用ManagedInstallerClass.InstallHelper(args);。

【问题讨论】:

  • 我怀疑 installutil.exe 正在寻找它
  • @MickyD 我没有使用 installutil。 Program 的Main() 调用ManagedInstallerClass.InstallHelper(args);。
  • 你应该使用 installutil。您希望如何安装该服务?
  • @MickyD 见stackoverflow.com/questions/1449994/…。我使用它是因为它更简单。
  • installutil.exe 随 .NET 一起提供。 C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe

标签: c# .net windows-services


【解决方案1】:

用于安装该服务的程序 (installutil.exe) 会检查您的程序集并运行安装程序。如其documentation 所述:

Installutil.exe 使用反射检查指定的程序集 并找到所有具有 System.ComponentModel.RunInstallerAttribute 属性设置为 true。

工具然后执行 Installer.Install 或 安装程序类型的每个实例上的 Installer.Uninstall 方法。 Installutil.exe 以事务方式执行安装;那 是,如果其中一个程序集安装失败,它会回滚 所有其他组件的安装。卸载不是事务性的。

更新:你说你不使用installutil,而是使用ManagedInstallerClass.InstallHelper。阅读此类文档:

此 API 支持产品基础架构,并非旨在 直接从您的代码中使用。

处理 Installutil.exe(安装工具)的功能。

因此,首先您不应该使用它,其次 - 它与 installutil 的作用相同(与此问题相关 - 使用反射来检查您的程序集并运行安装程序)。我想installutil 工具实际上只是调用了这个方法。请注意,您必须将路径传递到 args 或 ManagedInstallerClass.InstallHelper 中的程序集,这就是它知道要使用反射检查哪个程序集并运行安装程序的方式。

【讨论】:

  • 我没有使用 installutil。 Program 的Main() 调用ServiceBase.Run(services);。
  • @ispiro 那么你如何安装你的服务呢?您链接的教程使用installutil。
  • 对不起,错误的方法:ManagedInstallerClass.InstallHelper(args); 是我的意思。
  • 所以你是说当我调用它时,它会通过它在程序集中找到ProjectInstaller,然后运行它?
  • Note that you have to pass path to your assembly - 正确。这就是我正在做的事情。不然就不行了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多