Wix - 尝试添加到所有程序文件夹

Posted

技术标签:

【中文标题】Wix - 尝试添加到所有程序文件夹【英文标题】:Wix - Trying to add to All Programs folder 【发布时间】:2017-11-07 21:18:40 【问题描述】:

我有一个简单的 C# 应用程序,我正在尝试使用 Wix(第一次)不仅安装文件,还添加指向 All Programs 文件夹的链接。 msi 创建所有正确的目录,很好地安装应用程序,甚至添加看起来不错的链接到所有程序(我的公司文件夹和文件夹下的应用程序链接)。

但是,转到“所有程序”,展开我公司文件夹的链接,然后单击该应用程序的链接,只会打开一个新的 Windows 资源管理器窗口,其中显示“C:\”主目录的内容。

我做错了什么?我查看了 Wix 帮助站点上的页面和此处的其他帖子(多次),没有看到我错过了什么。

顺便说一句 - 我正在使用所有“绑定”。和“变种”。参考,希望一旦我完成所有工作,我可以将其用作未来应用程序的模板,而无需更改许多文字。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="CE767FBA-D925-4227-887B-34B95CDE390F" Name="Application Settings Editor" Language="1033" Version="1.0.0.0" 
      Manufacturer="My Company Name" UpgradeCode="8DC42ABA-F73D-4113-9BFD-0766B4124FD1">
    <Package InstallerVersion="300" Compressed="yes" InstallScope="perMachine"/>
    <Media Id="1" Cabinet="myapplication.cab" EmbedCab="yes" />

    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="MANUFACTURERFOLDER" Name="!(bind.property.Manufacturer)" >
          <Directory Id="APPLICATIONROOTDIRECTORY" Name="!(bind.property.ProductName)"/>
        </Directory>
      </Directory>
      <!-- Step 1: Define the directory structure -->
      <Directory Id="ProgramMenuFolder">
        <Directory Id="CompanyFolder" Name="!(bind.property.Manufacturer)">
          <Directory Id="AppFolder" Name="!(bind.property.ProductName)"/>
        </Directory>
      </Directory>
    </Directory>

    <DirectoryRef Id="APPLICATIONROOTDIRECTORY">
      <Component Id="$(var.Application_Settings_Editor.TargetFileName)" Guid="8DC42ABA-F73D-4113-9BFD-0766B4124FD1">
        <File Id="$(var.Application_Settings_Editor.TargetFileName)" Source="..\Application Settings Editor\bin\Debug\Application_Settings_Editor.exe" KeyPath="yes" Checksum="yes"/>
      </Component>
    </DirectoryRef>

    <!-- Step 2: Add the shortcut to your installer package -->
    <DirectoryRef Id="AppFolder">
      <Component Id="AppStartMenu" Guid="2781BD2D-5F30-4D2A-BBAE-D2B64EB30A75">
        <Shortcut Id="AppStartMenuShortcut"
           Name="!(bind.property.ProductName)"
           Description="General Application Settings Editor"
           Target="[INSTALLFOLDER]\[$(var.Application_Settings_Editor.TargetFileName)]"
           WorkingDirectory="APPLICATIONROOTDIRECTORY"/>
        <RemoveFolder Id="RemoveCompanyFolder" Directory="CompanyFolder" On="uninstall"/>
        <RemoveFolder Id="RemoveAppFolder" Directory="AppFolder" On="uninstall"/>
        <RegistryValue Root="HKCU" Key="Software\!(bind.property.Manufacturer)\!(bind.property.ProductName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
      </Component>
    </DirectoryRef>

    <Feature Id="MainApplication" Title="Main Application" Level="1">
      <ComponentRef Id="$(var.Application_Settings_Editor.TargetFileName)" />
      <ComponentRef Id="AppStartMenu" />
    </Feature>
  </Product>
</Wix>

【问题讨论】:

【参考方案1】:

您的快捷方式的目标看起来不正确,因为您没有 ID 为“INSTALLFOLDER”的目录。尝试 [APPLICATIONROOTDIRECTORY] 而不是 [INSTALLFOLDER]。

<Shortcut Id="AppStartMenuShortcut"
       Name="!(bind.property.ProductName)"
       Description="General Application Settings Editor"
       Target="[APPLICATIONROOTDIRECTORY]\$(var.Application_Settings_Editor.TargetFileName)"
       WorkingDirectory="APPLICATIONROOTDIRECTORY"/>

【讨论】:

谢谢!这固定了路径。让我感到震惊的是,我看到的所有示例都使用了“[INSTALLFOLDER]”标签,而且没有一个我能看到它的任何定义,所以我认为这是某种形式的内部“魔术”值。我需要做的唯一另一件事是删除该行中可执行文件名称周围的方括号 - 否则,它会将其安装为通用文件,并且系统会询问您要使用什么启动它。 @KimCrosser 我编辑了答案以从可执行文件名称中删除方括号。文件夹 ID 成为属性。有“魔法值”,properties defined by Windows Installer

以上是关于Wix - 尝试添加到所有程序文件夹的主要内容,如果未能解决你的问题,请参考以下文章

WIX RemoveFolder 问题

如何为 Wix 刻录引导程序 exepackage 添加依赖文件夹

卸载 WiX 时删除文件

向 WiX 安装程序添加自定义操作

WiX MSI:将演示项目与安装程序捆绑在一起

恢复到以前版本的 wix 安装程序