WiX 3, сводящий меня с ума - пытающийся создать настольный ярлык

У меня есть приложение, которое устанавливается с WiX 3 - большая часть установки хорошо работает к настоящему времени, но пытающийся заставить настольный ярлык работать, кажется, стоит мне моего ума...

У меня есть свое устанавливаемое приложение, и у меня уже есть ярлык на папке Start Menu - работает просто великолепно. Но как я бужу настольный ярлык и выполнение?

<Product Id="*" Name="....." UpgradeCode="MY-GUID">
  <Package Id="*" InstallerVersion="200" Compressed="yes" />
    <Media Id="1" Cabinet="foobar.cab" EmbedCab="yes" />
    <Property Id="ALLUSERS">1</Property>

    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramMenuFolder">
        <Directory Id="ApplicationProgramsFolder" Name="FooBar"/>
      </Directory>
      <Directory Id="DesktopFolder"  SourceName="Desktop"/>
      <Directory Id="ProgramFilesFolder">
         <Directory Id="FoobarDir" Name="FOOBAR">
            <Directory Id="INSTALLLOCATION" Name="FooApp">
              <Component Id="MainFiles" Guid=".....">
                <File Id="FooMainApp" Source="FooMainApp.exe" />
              </Component>
            </Directory>
         </Directory>
      </Directory>
    </Directory>
    ....
    <!-- this shortcut here works just fine ... -->
    <DirectoryRef Id="ApplicationProgramsFolder">
      <Component Id="AppShortcut" Guid="...">
         <Shortcut Id="ApplicationStartMenuShortcut"
                   Name="FooBarApp" Description="..."
                   Target="[INSTALLLOCATION]FooMainApp.exe"
                   WorkingDirectory="INSTALLLOCATION"/>
      </Component>
    </DirectoryRef>
    <!-- but this shortcut here never seems to work .. ... -->
    <DirectoryRef Id="DesktopFolder">
       <Component Id="DesktopShortcut" Guid="....." >
          <Shortcut Id="DesktopAppShortcut"
                    Advertise="no"
                    Name="FooBarApp"  Description="...."
                    Target="[INSTALLLOCATION]FooMainApp.exe"
                    WorkingDirectory="INSTALLLOCATION"/>
       </Component>
    </DirectoryRef>

Ошибки, которые я продолжаю получать:

ICE18: KeyPath для Компонента: 'DesktopShortcut' является Каталог: 'DesktopFolder'. Пара Каталога/Компонента должна быть перечислена в таблице CreateFolders.
ICE38: Компонент DesktopShortcut устанавливает на профиле пользователя. Это должно использовать ключ реестра под HKCU как его KeyPath, не файл.
ICE43: Компонент DesktopShortcut не рекламировал ярлыки. Это должно использовать ключ реестра под HKCU как его KeyPath, не файл.

Я не понимаю, какой WiX 3 / Windows Installer пытается сказать мне здесь.... кого-либо??

Оба компонента, AppShortcut и DesktopShortcut, на самом деле часть "основной" функции - я не вижу проблемы там. Я не могу выяснить то что же, спрашивается, могло быть неправильным здесь....

Обновление: хорошо, таким образом, я добавил некоторый материал ключа реестра к своему настольному ярлыку

<Component Id="DesktopShortcut" Guid="BF3587B4-F52E-411E-8814-CFCBF8201C0D">
    <RegistryKey Root="HKCU" Key="Software\Foo Inc\FooBarApp\Installed" 
                 Action="createAndRemoveOnUninstall">
       <RegistryValue Name="DTSC" Value="1" Type="integer" KeyPath="yes"/>
    </RegistryKey>
    <Shortcut Id="DesktopShortcut" Directory="DesktopFolder"
              Name="FooBar" WorkingDirectory="INSTALLLOCATION"
              Icon="foobar.ico" 
              Target="[INSTALLOCATION]FooMainApp.exe"/>
</Component>

теперь сообщений ICE не стало, но когда я пытаюсь установить приложение, я получаю Ошибку 1909 - целевая папка не существует, или у Вас нет разрешения записать в него (или что-то как этот)

Обновление 2: вышеупомянутый предоставленный код кода действительно работает над Победой XP, но это продолжает приводить к сбою на Сервере Победы 2003 :-( Дальнейшие идеи??

22
задан Yan Sklyarenko 12 January 2016 в 16:58
поделиться

2 ответа

Вот рабочий пример из нашего живого производственного кода ...

<Fragment>
    <Component Id="DesktopShortcut" Directory="APPLICATIONFOLDER" Guid="*">
        <RegistryValue Id="RegShortcutDesktop" Root="HKCU" 
                Key="SOFTWARE\ACME\settings" Name="DesktopSC" Value="1" 
                Type="integer" KeyPath="yes" />
        <Shortcut Id="desktopSC" Target="[APPLICATIONFOLDER]MyApp.exe"
                Directory="DesktopFolder" Name="My Application" 
                Icon="$(var.product).ico" IconIndex="0"
                WorkingDirectory="APPLICATIONFOLDER" Advertise="no"/>
    </Component>
</Fragment>
18
ответ дан 29 November 2019 в 05:10
поделиться

Каждое из этих ICE сообщений в основном жалуется на одно и то же: компонент, устанавливающий ярлык, должен иметь запись реестра в качестве keypath. Чтобы исправить это, добавьте в компонент что-то вроде этого:

<RegistryValue Root="HKCU" Key="Software\MyCompany\MyApplicationName" 
    Name="desktopShortcut" Type="integer" Value="1" KeyPath="yes"/>

То же самое относится и к компоненту, устанавливающему ярлык меню "Пуск". Взгляните на соответствующий пример из документации wix о создании ярлыка.

6
ответ дан 29 November 2019 в 05:10
поделиться