Wix создать ярлык в пользовательской папке автозагрузки

Я пытаюсь создать установщик, который запускает программу при запуске для текущего пользователя. Я могу создать ярлык, но я не могу поместить его в нужную папку.

<!-- some wix stuff -->
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<!-- more wix stuff -->
<Directory Id="TARGETDIR" Name="SourceDir">
    <!-- more directory stuff -->
    <Directory Id="UserStartupFolder"/>
</Directory>
<SetDirectory Id="UserStartupFolder" Value="[%APPDATA]\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\"/>
<!-- more wix stuff -->
<DirectoryRef Id="UserStartupFolder">
    <Component Id="StartupFolderShortcut" Guid="MyGUID">
        <Shortcut Id="StartupFolderShortcut" Name="MyShortcut" Description="$(var.description)" Target="[#MainExecutable]" WorkingDirectory="INSTALLFOLDER"/>
        <RegistryValue Root="HKCU" Key="Software\$(var.companyDisplayName)\$(var.projectDisplayName)\UserStartupItem" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
    </Component>
</DirectoryRef>
<!-- more wix stuff -->

Я не понимаю, почему это не работает. Если я изменю Value из SetDirectory в "[%APPDATA]\\Microsoft\\Windows\\"ярлык находится в той папке Windows, как и ожидалось, но если я изменю его на "[%APPDATA]\\Microsoft\\Windows\\Start Menu\\"ярлык не находится в этой папке меню Пуск. Я не знаю, пытается ли Wix сделать что-то особенное с папкой меню "Пуск", или есть проблема с пробелом в имени папки, или это что-то еще.

В документации упоминается, что Value использует синтаксис Formatted, но в нем ничего не говорится о пробелах. Кроме того, большинство распознанных переменных среды, похоже, не работают с этим (по крайней мере, я не понял этого), но если бы они работали, мне не пришлось бы жестко программировать половину пути.

Как создать ярлык в папке автозагрузки пользователя?

1 ответ

Почему бы не использовать непосредственно StartupFolder -свойство? Таким образом, вам не придется возиться со всеми шансами создания путей вручную.

Что касается вашего вопроса о том, почему это не работает: у меня нет конкретного ответа, но вы можете проверить:

  • О чем сообщает журнал установки
  • Если компонент установлен в обоих случаях правильно.
Другие вопросы по тегам