Wix# 使用 C# 在公共启动文件夹中创建快捷方式而不是 XML

Wix# create shortcut in common startup folder using C# not XML

我正在尝试在公共启动文件夹中创建快捷方式,因此当任何用户登录我的应用程序时 运行。我正在使用 nuget 包 WinSharp 版本 1.0.36.2 创建 MSI 安装程序。

下面是我的 WinSharp 项目的 Main。思路是将app安装到program files,在启动文件夹中创建快捷方式(C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp)。在桌面上创建快捷方式的注释行工作正常。构建当前版本给出错误:

Error ICE38: Component StartupFolder.EmptyDirectory installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file.

是否有像 Desktop 这样的不同目录 ID 可用于启动文件夹?

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 create shortcut in user startup folder

您可以使用 %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"),

None 这些对我有用,但这确实:

        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".