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"),
Другие вопросы по тегам