代码之家  ›  专栏  ›  技术社区  ›  Peter M

WiX服务安装程序和自定义安装事件

  •  4
  • Peter M  · 技术社区  · 16 年前

    Installer class 我现在用的是微软提供的命令行 InstallUtil 安装和卸载。这工作得很好,作为我系统的一部分,我将事件处理程序附加到AfterUninstallEventHandler和CommittedEventHandler事件。在我的例子中,我只是使用它们将消息记录到一个定制的事件日志中—显示安装和卸载日期、时间和程序版本。

    目前我正在试验 Wix v3.5 Beta 1 为了打包我的一些东西,包括这个服务,我使用Wix ServiceInstall和ServiceControl来替换我用InstallUtil手动完成的工作。

    然而,Wix似乎使用了与InstallUtil完全不同的机制来安装服务。这可以从Wix控制的服务的名称和描述中看出(与服务程序中嵌入的内容相反),并且我的事件不再触发(如果使用不同的安装机制,我怀疑它们是否会触发)。

    编辑

    Christopher建议从我的代码中分解出与服务相关的定义,并将它们移到Wix安装程序项目中。这让我感到不安,因为现在我要么必须找到一种方法在两个不同的系统之间共享信息(我不知道如何在代码和Wix项目之间共享),要么忍受在两个不同的位置定义信息(非常糟糕的软件实践)。

    1 回复  |  直到 10 年前
        1
  •  3
  •   Christopher Painter    16 年前

    从windows安装程序的角度来看,InstallUtil是一个邪恶的反模式,因为它将脆弱的进程外代码注入到声明性编程模型中。Windows安装程序早就有ServiceInstall和ServiceControl表了,这非常有效。这同样适用于Regasm和Regserver。我们更喜欢提取COM数据并将其编写到安装程序中,让MSI负责应用注册表值,而不是加载程序集并调用入口点,希望它能正常工作。当它失败时,你不知道为什么,你不能回滚机器的状态。

    你在活动中做什么?我要么消除它们,要么将它们重构成MSI可以为您做的事情。如果仍然不够,请编写一个DTF自定义操作,并在InstallServices和StartServices之间安排它。

    推荐文章