为所有用户安装可选桌面快捷方式

时间:2013-06-26 12:02:56

标签: wix registry shortcut

我想制作一个wix安装程序,为所有用户提供可选桌面快捷方式。可选方法,我不能将它放在主exe的component中,而是放在单独的component中,以便我可以为快捷方式设置单独的feature

这样做时,wix会抱怨:

  

错误LGHT0204:ICE38:组件DesktopShortcut安装到用户配置文件。它必须使用HKCU下的注册表项作为其KeyPath,而不是文件。

所以我设置了一个这样的aditional注册表项:

<Component Id="DesktopShortcut"  Guid="767f3e19-9a7d-4793-9782-75516494a57c">
    <Shortcut Target="[APPLICATIONROOTDIRECTORY]ocean.exe" Id="OceanShortcutDesktop" Name="$(var.ProductName)" WorkingDirectory='APPLICATIONROOTDIRECTORY' Icon="OceanIcon"/>
    <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]\installs' Name="desktopshortcut" Type='string' Value='' KeyPath='yes' />
</Component>

快捷方式位于“所有用户”中,因为我设置了ALLUSERS = 1属性。但是,注册表没有等效项,密钥位于当前(安装)用户注册表中。这是IMHO的一个问题:如果用户配置文件被删除,则卸载时不再删除该快捷方式。

使用“HKLM”会导致wix错误(每个用户和每台机器混合):

  

错误LGHT0204:ICE38:组件DesktopShortcut安装到用户配置文件。它的KeyPath注册表项必须属于HKCU。

这是非常愚蠢的,因为“所有用户”组件应该链接到机器,而不是普通用户,因为没有“所有用户”注册表。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试将注册表根目录更改为&#39; HKMU&#39; (根据我的记忆,当安装是每台机器时应该写入HKEY_LOCAL_MACHINE,而当它不是时,应该写入HKEY_CURRENT_USER)。

如果您将根更改为&#39; HKMU&#39;您将收到ICE57错误(组件&#39; DesktopShortcut&#39;具有每用户数据和可以是每用户或每台计算机的密钥路径。)

您可以取消此错误,安装程序将创建所有用户快捷方式 (当我尝试它时,它很有用,但我不确定它是最好的方法)。

(要禁用ICE57错误,请参阅:How to fix ICE57.Per-User installation