gpt4 book ai didi

wix - (WiX) 用于每台机器安装的程序文件快捷方式

转载 作者:行者123 更新时间:2023-12-03 11:58:44 32 4
gpt4 key购买 nike

关注 example here ,我在 ProgramMenuFolder 中添加了一个快捷方式启动我的应用程序。 (我的代码实际上更简单,因为我不需要额外的文件夹。)

<DirectoryRef Id='ProgramMenuFolder'>
<Component Id='cmpStartMenuShortcut'
Guid='MY GUID HERE'>
<Shortcut Id='StartMenuShortcut'
Name='$(var.ProductName)'
Icon='MainIcon.ico'
Description='$(var.ProductName)'
Target='[ClientDir]myapp.exe'
WorkingDirectory='ClientDir'/>
<RegistryValue Action='write' Type='integer' Root='HKCU'
Key='Software\Company\Product Name'
Name='installed' Value='1' KeyPath='yes'/>
</Component>
</DirectoryRef>
由于我的安装是每台机器(ALLUSERS=1、Package/@InstallPrivileges='elevated' 和 @InstallScope='perMachine'),ProgramMenuFolder 是机器上所有用户的文件夹。
我的问题与注册表值有关。我的理解是,只需为包含快捷方式的组件提供 KeyPath 即可。该示例使用 HKCU,它是每个用户的位置。
将每个用户的值用作每个机器组件的 KeyPath 不是错误的吗?
如果一台机器有两个管理员,管理员 #1 安装产品,管理员 #2 尝试修复,那么 Windows Installer 将看不到注册表值并认为缺少快捷方式,它会安装一个副本,对吗?
所以我尝试将 RegistryValue/@Root 更改为 HKLM,但随后 WiX 提示:

error LGHT0204 : ICE38: Component cmpStartMenuShortcut installs to user profile. It's[sic] KeyPath registry key must fall under HKCU.

error LGHT0204 : ICE43: Component cmpStartMenuShortcut has non-advertised shortcuts. It's[sic] KeyPath registry key should fall under HKCU.

error LGHT0204 : ICE57: Component 'cmpStartMenuShortcut' has both per-user and per-machine data with a per-machine KeyPath.


我不明白为什么 key 必须在 HKCU 之下。

最佳答案

这种快捷方式适用于现在或在调用它时可能未安装的目标。它创建经典的 .lnk 快捷方式文件。它对于指向您的安装程序不负责的目标的快捷方式很有用,但可能对您的产品用户使用(例如 cmd.exe)有用。

或者,当目标未宣传(产品已卸载)时,您正在安装或宣传的目标的快捷方式将被卸载。例如,WiX 安装了一个名为 WiX 文档的 wix.chm 快捷方式。广告快捷方式的 Shortcut 元素可以成为 File 元素的子元素。

这是一个手写的例子:

<Component Id="ProductComponent">
<File Source="$(var.ConsoleApplication1.TargetPath)" KeyPath="yes">
<Shortcut Id="$(var.ConsoleApplication1.TargetName)Shortcut"
Name="$(var.ConsoleApplication1.TargetName)"
Advertise="yes"
Description="Starts $(var.ConsoleApplication1.TargetName)"
Directory="ProgramMenuFolder" />
</File>
</Component>

要将 Shortcut 元素插入到 heat 的输出中,请将其传递给 XSL 转换的路径。片段:
<xsl:template match="wix:File[contains(@Source,'\myapp.exe')]">
<xsl:copy-of select="." />
<Shortcut Id='StartMenuShortcut'
Advertise="yes"
Name='$(var.ProductName)'
Icon='MainIcon.ico'
Description='$(var.ProductName)'
WorkingDirectory='ClientDir'/>
</xsl:template>

关于wix - (WiX) 用于每台机器安装的程序文件快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17245832/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com