【问题标题】:install windows service in custom actions在自定义操作中安装 Windows 服务
【发布时间】:2012-05-16 23:40:29
【问题描述】:

我创建了一个 c# 4.0 windows 服务。我为其创建了一个安装程序项目 (.msi),将服务安装到特定文件夹。

为了完全自动化该过程,我想安装该服务作为我的安装程序自定义操作的一部分。

如何编写自定义操作以安装或在卸载 msi 时卸载 windows 服务?

【问题讨论】:

标签: c# windows-services windows-installer custom-action


【解决方案1】:

您可以使用ServiceInstaller 类。一个快速的解决方案是找到installutil 工具并针对您的Service.exe 执行它,但是您必须捕获输出以查看安装是否成功并且您对Install、@987654324 没有太多控制权@、RollbackUninstall 阶段。

【讨论】:

    【解决方案2】:

    简单的答案:不要。正确的方法是使用 MSI 数据库本身安装它,即ServiceInstallServiceControl 表。每个用于创建 MSI 的“方便”IDE 以及 WiX 都带有使用此内置工具的原语。

    这是最佳实践的真正原因,就像在您的 MSI 中包含 COM 注册而不是调用 COM (DLL) 的 DllRegisterServer 进行注册一样,您的应用程序可能 在用户尝试删除它时失效。

    即使更新的 Windows 安装程序仍然可以执行数据库操作,例如在升级 Windows 本身之后,而您的代码可能会拒绝运行或由于其他原因可能无法运行。

    【讨论】:

    • 我遇到了同样的问题。我有一个自定义操作,它将生成一组属性以及要在服务配置 xml 中替换的属性。但是 wix 在执行自定义操作之前启动服务。因此配置文件具有相同的旧值。我创建了一个堆栈溢出问题stackoverflow.com/questions/40043204/…你能帮我解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多