我有一个基于WiX的MSI,可以安装服务和一些快捷方式(以及许多其他没有的快捷方式)。
如WiX docs中所述创建快捷方式,并在HKCU下使用注册表项作为密钥文件。这是一个所有用户安装,但要通过ICE38,此注册表项必须在当前用户之下。
当服务启动时(它在SYSTEM帐户下运行),它注意到该注册表项无效(至少是该用户)并再次运行安装以“修复”。
在事件日志中,我收到MsiInstaller事件1001和1004,显示“资源'HKEY_CURRENT_USER \ SOFTWARE \ MyInstaller \ Foo'不存在。”这并不奇怪,因为SYSTEM用户没有这个密钥。
我启用了系统范围的MSI日志记录,并且自动修复在C:\ Windows \ Temp文件夹中创建了其日志文件,而不是特定用户的TEMP文件夹,这似乎意味着当前用户是SYSTEM(加上日志文件显示) “呼叫过程”是我的服务。)
我可以做些什么来禁用自动修复功能吗?我做错了什么或打破了一些MSI规则吗?关于下一步要去哪里的任何提示?
答案 0 :(得分:0)
将组件拆分为单独的功能。通过将服务放在它自己的功能中,它不会扫描其他组件。
答案 1 :(得分:0)
如果您使用广告快捷方式,则不需要HKCU注册表项。
答案 2 :(得分:0)
为了避免您看到的自动修复但仍具有相同的效果you could use ActiveSetup,这是一个dead simple系统,可确保每个用户都有一个程序 - 通常是一个配置程序或脚本配置HKCU注册表设置 - 运行一次。
(我在几年前写过的first article linked above比较了不同的方法,如果你没有猜到,那么赞成ActiveSetup ...)