Wix - Попытка добавить в папку "Все программы"

У меня есть простое приложение на C#, и я пытаюсь использовать Wix (впервые), чтобы не просто установить файл, но и добавить ссылку на него в папку "Все программы". 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 ответ

Решение

Цель для вашего ярлыка выглядит неверно, потому что у вас нет каталога с идентификатором "INSTALLFOLDER". Попробуйте [APPLICATIONROOTDIRECTORY] вместо [INSTALLFOLDER].

<Shortcut Id="AppStartMenuShortcut"
       Name="!(bind.property.ProductName)"
       Description="General Application Settings Editor"
       Target="[APPLICATIONROOTDIRECTORY]\$(var.Application_Settings_Editor.TargetFileName)"
       WorkingDirectory="APPLICATIONROOTDIRECTORY"/>
Другие вопросы по тегам