Pet*_*r M 5 installation windows-installer windows-services wix wix3.5
我有一个现有的(基于 C# 的)windows 服务,它派生自Installer 类,我目前使用 MS 提供的命令行InstallUtil来安装和卸载它。这工作正常,作为我系统的一部分,我已将事件处理程序附加到 AfterUninstallEventHandler 和 CommittedEventHandler 事件。就我而言,我只是使用它们将消息记录到自定义事件日志中 - 显示安装和卸载日期和时间以及程序版本。
目前我正在试验Wix v3.5 Beta 1来打包我的一堆东西,包括这个服务,我正在使用 Wix ServiceInstall 和 ServiceControl 来替换我手动使用 InstallUtil 做的事情。
然而,Wix 似乎使用与 InstallUtil 完全不同的机制来安装服务。这可以从 Wix 控制的服务的名称和描述中看出(与嵌入在服务程序中的服务相反)并且我的事件不再触发(如果使用不同的安装机制,我怀疑它们会)。
那么 Wix 是否有可能以与 InstallUtil 相同的方式执行服务安装,或者我只是要忍受这些差异?
编辑
Christopher 建议从我的代码中分离出与服务相关的定义,并将它们移动到 Wix 安装程序项目中。这让我感到不安,因为现在我要么必须找到一种方法在两个独立的系统之间共享信息(我不知道如何在代码和 Wix 项目之间共享),要么忍受在两个不同的位置定义信息(非常糟糕)软件实践)。
从 Windows 安装程序的角度来看,InstallUtil 是一种邪恶的反模式,因为它将脆弱的进程外代码注入到声明性编程模型中。Windows Installer 长期以来一直拥有 ServiceInstall 和 ServiceControl 表,并且效果非常好。这同样适用于 Regasm 和 Regserver。我们更喜欢提取 COM 数据并将其编写到安装程序中,并让 MSI 负责应用注册表值,而不是加载程序集和调用入口点以希望它能正常工作。当它失败时,你不知道为什么,也无法回滚机器的状态。
您在活动中做了哪些事情?我会消除和/或重构它们中的每一个,使其成为 MSI 可以为您做的事情。如果还不够,请编写 DTF 自定义操作并在 InstallServices 和 StartServices 之间安排它。
| 归档时间: |
|
| 查看次数: |
1857 次 |
| 最近记录: |