Wix# создает ярлык в общей папке автозагрузки, используя C#, а не XML
Я пытаюсь создать ярлык в общей папке автозагрузки, чтобы при запуске любого пользователя вошел в мое приложение. Я использую пакет nuget WinSharp версии 1.0.36.2 для создания установщика MSI.
Ниже мой Main из проекта WinSharp. Идея состоит в том, чтобы установить приложение для программных файлов и создать ярлык в папке автозагрузки (C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp). Закомментированная строка, которая создает ярлык на рабочем столе, работает нормально. Сборка текущей версии дает ошибку:
Ошибка ICE38: Компонент StartupFolder.EmptyDirectory устанавливается в профиль пользователя. Он должен использовать ключ реестра в HKCU в качестве своего KeyPath, а не файл.
Существует ли другой идентификатор каталога, например Desktop, который будет работать для папки автозагрузки?
var project = new ManagedProject("Plate Synthesis Listener Setup",
new Dir(@"%ProgramFiles%\myCompany/myApp",
new File(@"..\myApp\bin\Debug\myApp.exe")
{
//Shortcuts = new[] {new FileShortcut("myApp", "%Desktop%")}
Shortcuts = new[] {new FileShortcut("myApp", "StartupFolder")}
},
new Files(@"..\myApp\bin\Debug\*.dll"),
new File(@"..\myApp\bin\Debug\myApp.exe.config")
{
GUID = new Guid("My new GUID"),
ManagedUI = ManagedUI.Empty,
Version = new Version(1, 0, 1)
};
project.ManagedUI.InstallDialogs.Add(Dialogs.Welcome)
.Add(Dialogs.Progress)
.Add(Dialogs.Exit);
project.BuildMsi();
Другие потоки, которые я видел, но для XML не C#:
Wix создать ярлык в пользовательской папке автозагрузки
Как: сделать запуск программы при запуске Windows с помощью wix toolset?
4 ответа
Ни один из них не работал для меня, но это сделало:
project.ResolveWildCards().FindFile(f => f.Name.EndsWith("My.exe")).First()
.Shortcuts = new[]{
new FileShortcut("Shortcut name", @"%AppData%\Microsoft\Windows\Start Menu\Programs")
};
Основное различие заключается в использовании @"%AppData%\Microsoft\Windows\Start Menu\Programs".
Ты можешь использовать %ProgramMenu\Startup%
для местоположения папки автозагрузки
//This will create three shortcuts
project.FindFile(f => f.Name.EndsWith("myapp.exe"))
.First()
.Shortcuts = new[]{
new FileShortcut("myapp", "INSTALLDIR"),
new FileShortcut("myapp","%Desktop%"),
new FileShortcut("myapp","%Startup%")
};
Принятый ответ не работал для меня, это вызвало ошибку ICE38: Component installs to user profile
,
То, что работало для меня, было использовать реестр:
new RegValue(RegistryHive.LocalMachine,
@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"MyApplication",
@"[INSTALLDIR]MyFolder\MyApp.exe"),