服务启动时,MSI安装程序启动自动修复

时间:2010-04-07 22:43:53

标签: wix windows-installer

我有一个基于WiX的MSI,可以安装服务和一些快捷方式(以及许多其他没有的快捷方式)。

WiX docs中所述创建快捷方式,并在HKCU下使用注册表项作为密钥文件。这是一个所有用户安装,但要通过ICE38,此注册表项必须在当前用户之下。

当服务启动时(它在SYSTEM帐户下运行),它注意到该注册表项无效(至少是该用户)并再次运行安装以“修复”。

在事件日志中,我收到MsiInstaller事件1001和1004,显示“资源'HKEY_CURRENT_USER \ SOFTWARE \ MyInstaller \ Foo'不存在。”这并不奇怪,因为SYSTEM用户没有这个密钥。

我启用了系统范围的MSI日志记录,并且自动修复在C:\ Windows \ Temp文件夹中创建了其日志文件,而不是特定用户的TEMP文件夹,这似乎意味着当前用户是SYSTEM(加上日志文件显示) “呼叫过程”是我的服务。)

我可以做些什么来禁用自动修复功能吗?我做错了什么或打破了一些MSI规则吗?关于下一步要去哪里的任何提示?

3 个答案:

答案 0 :(得分:0)

将组件拆分为单独的功能。通过将服务放在它自己的功能中,它不会扫描其他组件。

答案 1 :(得分:0)

如果您使用广告快捷方式,则不需要HKCU注册表项。

答案 2 :(得分:0)

为了避免您看到的自动修复但仍具有相同的效果you could use ActiveSetup,这是一个dead simple系统,可确保每个用户都有一个程序 - 通常是一个配置程序或脚本配置HKCU注册表设置 - 运行一次。

(我在几年前写过的first article linked above比较了不同的方法,如果你没有猜到,那么赞成ActiveSetup ...)