(WiX)每个机器安装的程序文件快捷方式

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 =’raised’和@ InstallScope =’perMachine’),所以ProgramMenuFolder是机器上所有用户文件夹.

我的问题与注册表值有关.我的理解是,需要为包含快捷方式的组件提供一个KeyPath.样本使用HKCU,它是每个用户的位置.

将每个用户的值用作每个机器组件的KeyPath是不是一个错误

如果一台机器有两个管理员,并且admin#1安装该产品,并且admin#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.

我不明白为什么这个密钥必须在HKCU下.

@H_301_23@
@H_301_23@
这种快捷方式适用于目前可能无法安装的目标,也不是在调用时.它创建经典的.​​lnk快捷方式文件.对于快捷方式来说,您的安装程序不负责,但可能对您的产品的用户有用(例如cmd.exe)的快捷方式.

或者,当目标是无权限的(产品被卸载)时,将卸载正在安装或广告的目标的快捷方式.例如,WiX安装了一个名为WiX文档的wix.chm快捷方式.广告快捷方式的快捷方式元素可以作为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>

要将快捷方式元素插入热输出,请将其传递到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>
@H_301_23@

相关文章

(1)when you ping a computer from itsafe,the ping command should return the local IP address. (...
1、点击win菜单,点击设置图标 2、选择系统选项 3、选择应用与程序选项 4、拉到最下方,选择程序与功能...
目前一直直接往Windows 2008 R2 Server中复制文件(暂时还没有搭建ftp服务),突然不能复制了,于是百度...
windows下使用vscode配合xebug调试php脚本 要下载有php_xebug.dll扩展的版本,最新版可能没有这个扩展,p...
在控制面板的程序与功能里启用和关闭windows功能打开,适用于linux的windows子系统
效果演示 推荐一个非常牛的文档网站生成器:docsify 我通过这个工具,成功将码云上的个人学习笔记发布到...