Создать ярлык на рабочий стол с помощью WiX

Итак, у меня есть этот проект установки в Wix, и я хотел иметь ярлык на рабочем столе. Это должно быть легко, вы можете подумать. Но это не тот случай. Все фрагменты кода, найденные в Интернете, не работали. После нескольких часов борьбы и прочтения документации я наконец понял это правильно, поэтому я делюсь этим с вами здесь.

 Ian Ray21 янв. 2018 г., 06:59
Это то, что я чувствую с таким большим количеством технологий Майкрософт. Эти дни. Этот комментарий приходит почти три года спустя. так очевидно, что уровень техники не улучшился.

Ответы на вопрос(5)

Решение Вопроса

Не забудьте поместить компонент в свой тег функции.

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="DesktopFolder" Name="Desktop">
        <Component Id="ApplicationShortcutDesktop" Guid="*">
            <Shortcut Id="ApplicationDesktopShortcut"
                Name="Text under your icon"
                Description="Comment field in your shortcut"
                Target="[MYAPPDIRPROPERTY]MyApp.exe"
                WorkingDirectory="MYAPPDIRPROPERTY"/>
            <RemoveFolder Id="DesktopFolder" On="uninstall"/>
            <RegistryValue
                Root="HKCU"
                Key="Software/MyAppName"
                Name="installed"
                Type="integer"
                Value="1"
                KeyPath="yes"/>
        </Component>
    </Directory>

    <Directory Id="ProgramFilesFolder" Name="PFiles">
        <Directory Id="MyCompany" Name="MyCompany">
            <Directory Id="MYAPPDIRPROPERTY" Name="MyAppName">
                <!-- main installation files -->
            </Directory>
        </Directory>
    </Directory>
</Directory>
 07 июн. 2016 г., 12:23
Мне пришлось добавить это в тег функции: & lt; ComponentRef Id = & quot; ApplicationShortcutDesktop & quot; / & GT;
 17 июн. 2015 г., 13:59
для чего это значение реестра?
 24 июл. 2015 г., 23:10
@BatteryBackupUnit Ярлык не может быть ключевым путем для компонента, поэтому значение реестра служит для этой цели. Тот же метод используется в документации WiX:wixtoolset.org/documentation/manual/v3/howtos/…
 30 окт. 2015 г., 10:45
Лучше поместить идентификатор файла для свойства Target вместо «[MYAPPDIRPROPERTY] MyApp.exe».
 10 авг. 2014 г., 21:13
Не публиковать жестко закодированные GUID. ПоложилGuid="*" вместо этого для автоматического создания guid или используйте {PUT-GUID-HERE}

& quot; Ошибка 3 ICE43: Компонент ... имеет не объявленные ярлыки. Он должен использовать ключ реестра в HKCU в качестве KeyPath, а не файл. & Quot;

Таким образом, я сделал это таким образом в файле с функциями:

   <Component Id="cmp79F6D61F01DD1060F418A05609A6DA70" 
              Directory="dirBin" Guid="*">
      <File Id="fil34B100315EFE9D878B5C2227CD1454E1" KeyPath="yes"
            Source="$(var.SourceDir)\FARMS.exe" >
        <Shortcut Id="DesktopShortcut"
                  Directory="DesktopFolder"
                  Name="FARMS $(var.FarmsVersion)"
                  Description="Local Land Services desktop application"
                  WorkingDirectory="INSTALLFOLDER"
                  Icon="FARMS.exe"
                  IconIndex="0"
                  Advertise="yes" >
           <Icon Id="FARMS.exe" SourceFile="$(var.SourceDir)\FARMS.exe" />
        </Shortcut>
        </File>
    </Component>

И упоминается папка рабочего стола в файле с описанием продукта:

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="DesktopFolder" Name="Desktop" />

      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="FARMS" >
        </Directory>
      </Directory>
    </Directory>
  </Fragment>

документация.

Во-первых, вы должны указать свой DesktopFolder,

   <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="DesktopFolder" Name="Desktop"/>

Затем вы должны создать компонент ярлыка для файла, для которого вы хотите создать ярлык.

  <Component Id="PutYourComponentIdHere" Directory="FileDirectory" Guid="*">
    <File Id="NotYourComponentId" KeyPath="yes" Source="..\YourFileSource\YourExecutable.exe">
      <Shortcut Id="desktopServer" Directory="DesktopFolder" Name="YourShourtcutName" WorkingDirectory='WhereShouldYourShortcutPoint' Advertise="yes"/>
    </File>
  </Component>

Это сработало для меня. Мне нужно поставить значок, но это легко. Надеюсь, что это работает.

<Product ...>
    <Feature Id="ProductFeature" Title="SetupProject" Level="1">
      ...
      ...
      <ComponentRef Id="cmpDesktopShortcut" />
    </Feature>

    <Component Id="cmpDesktopShortcut" Guid="PUT-GUID-HERE" Directory="DesktopFolder" >
        <Shortcut Id="MyDesktopShortcut" 
                  Name="Setup Project" 
                  Description="Opens the program." 
                  Directory="DesktopFolder" 
                  Target="[INSTALLFOLDER]App.exe"
                  WorkingDirectory="INSTALLFOLDER"/>
        <RegistryValue Root="HKCU" Key="Software\My Company\Sample Application" Name="installed" Type="integer" Value="1" KeyPath="yes" />
    </Component>
</Product>

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="DesktopFolder" SourceName="Desktop" />
  <Directory Id="MergeRedirectFolder">
    <Component Id="MyExeComponent" Guid="{PUT-GUID-HERE}">
      <File Id="MyExeFile" Source="$(var.ExeSourcePath)" KeyPath="yes">
        <Shortcut
          Id="DesktopShortcut"
          Directory="DesktopFolder"
          Name="$(var.ShortcutName)"
          WorkingDirectory="MergeRedirectFolder" />
      </File>
    </Component>
  </Directory>
</Directory>
 04 авг. 2017 г., 18:33
Отdocumentation в отношении раздела реестра:"This is required as a Shortcut cannot serve as the KeyPath for a component when installing non-advertised shortcuts for the current users."
 15 мая 2018 г., 20:39
В большинстве случаев вам не нужно устанавливать рабочий каталог ярлыка в каталог, в который установлено приложение.
 02 янв. 2018 г., 14:55
сам файловый компонент является ключевым путем, ярлык «наследует» свойства файла. Этот способ может быть немного запутанным, хотя, когда вы пытаетесь отследить этот ярлык на рабочем столе среди множества файлов ... предпочтения пользователей относительно компактности и прослеживаемости, я думаю?

Ваш ответ на вопрос