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

时间:2016-06-03 14:27:10

标签: c# installer wixsharp

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

以下是WinSharp项目的主要内容。我们的想法是将应用程序安装到程序文件并在启动文件夹中创建一个快捷方式(C:\ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ StartUp)。在桌面上创建快捷方式的注释掉的行正常工作。构建当前版本会出现错误:

  

错误ICE38:组件StartupFolder.EmptyDirectory安装到用户配置文件。它必须使用HKCU下的注册表项作为其KeyPath,而不是文件。

是否有像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

How to : Making a program start on Windows startup with wix toolset?

4 个答案:

答案 0 :(得分:0)

您可以将%ProgramMenu\Startup%用于启动文件夹位置

答案 1 :(得分:0)

  //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%")         
  };      

答案 2 :(得分:0)

接受的答案对我没有用,导致错误ICE38: Component installs to user profile

对我有用的是使用注册表:

 new RegValue(RegistryHive.LocalMachine,
     @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
     "MyApplication",
     @"[INSTALLDIR]MyFolder\MyApp.exe"),

答案 3 :(得分:0)

这些都不适合我,但确实如此:

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