2010-04-07 133 views
1

我有一个基于WiX的MSI,可以安装服务和一些快捷方式(以及许多其他不支持的文件)。MSI安装程序启动服务启动时的自动修复

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

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

在事件日志中,我得到MsiInstaller事件1001和1004,显示“The resource'HKEY_CURRENT_USER \ SOFTWARE \ MyInstaller \ Foo'不存在。”这并不奇怪,因为SYSTEM用户不会有这个键。

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

有什么我可以做的,禁用自动修复功能?我做错了什么或违反了一些MSI规则?任何关于下一步看什么的提示?

+0

你不能将快捷方式添加到ALLUSER的开始菜单在文件系统中呢? – 2010-04-07 22:49:29

回答

0

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

0

如果使用公布的快捷方式,则不需要HKCU注册表项。

+0

这可能听起来很奇怪,但我工作的地方其实不喜欢广告/修理。我们的软件部署在尽管我们缓存软件的环境中,但客户不喜欢看到修理期限。 – 2010-04-08 14:48:18

0

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

(该first article linked above,这是我几年前写的,比较了不同的方法,如果你不已经猜到,有利于ActiveSetup ...)