【问题标题】:Wix# create shortcut in common startup folder using C# not XMLWix# 使用 C# 而不是 XML 在通用启动文件夹中创建快捷方式
【发布时间】:2016-06-03 14:27:09
【问题描述】:

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

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

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

是否有其他目录 ID(例如 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 create shortcut in user startup folder

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

【问题讨论】:

    标签: c# installation wixsharp


    【解决方案1】:

    这些都不适合我,但这确实有效:

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

    【讨论】:

    • 分两步解决了我的问题。创建新的 ManagedProject,然后找到 exe 并添加新的 FileShortcut。
    【解决方案2】:

    您可以使用%ProgramMenu\Startup% 作为启动文件夹位置

    【讨论】:

      【解决方案3】:
        //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%")         
        };      
      

      【讨论】:

        【解决方案4】:

        接受的答案对我不起作用,它导致了错误ICE38: Component installs to user profile

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-15
          • 2011-02-10
          • 2016-12-30
          • 2012-10-29
          • 1970-01-01
          • 1970-01-01
          • 2012-10-12
          • 2013-06-28
          相关资源
          最近更新 更多