【问题标题】:Add executable parameter in start menu shortcut在开始菜单快捷方式中添加可执行参数
【发布时间】:2018-07-25 07:27:03
【问题描述】:

我有一个用 gcc-g++ 编译的可执行文件,比如launcher.exe。我想以launcher.exe --param 运行它。因此,我创建了一个包含所有资产、二进制文件等的 UWP 文件夹。我可以使用 makeappx.exe 成功将文件夹打包到 APPX 包中,并使用 signtool.exe 唱歌。它安装并成功启动。但我无法在该 appxmanifest.xml 文件中添加 --param。清单文件如下:

 <Applications>
    <Application Executable="launcher.exe" EntryPoint="Windows.FullTrustApplication" Id="test">
      <uap:VisualElements DisplayName="launcher" Square44x44Logo="Assets\test44x44.png" Description="" BackgroundColor="transparent" Square150x150Logo="Assets\test150x150.png">
        <uap:InitialRotationPreference>
          <uap:Rotation Preference="portrait"/>
          <uap:Rotation Preference="landscape"/>
        </uap:InitialRotationPreference>
      </uap:VisualElements>
      <Extensions>
        <rescap3:Extension Category="windows.desktopAppMigration">
          <rescap3:DesktopAppMigration>
            <rescap3:DesktopApp ShortcutPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\test\launcher.lnk"/>
          </rescap3:DesktopAppMigration>
        </rescap3:Extension>
      </Extensions>
    </Application>
  </Applications>

那么,如何在开始菜单的快捷方式或桌面快捷方式中添加该命令参数?

【问题讨论】:

    标签: uwp desktop-bridge


    【解决方案1】:

    由于参数将在清单中进行硬编码,因此您最好更改 launcher.exe 的代码,使其在作为打包应用程序启动时采用“--param”。

    如果您无法更改该二进制文件的代码,您可以在您的包中添加第二个 EXE,例如 helper.exe,将其设为入口点,然后使用所需参数从那里启动 launcher.exe。

    这里是 helper.exe 的代码 sn-p:

    static void Main(string[] args)
    {
        string result = System.Reflection.Assembly.GetExecutingAssembly().Location;
        int index = result.LastIndexOf("\\");
        string processPath = $"{result.Substring(0, index)}\\..\\Launcher\\Launcher.exe";
        Process.Start(processPath, "--param");
    }
    

    完整的示例项目上传到这里:https://1drv.ms/u/s!AovTwKUMywTNnY4ofULXFV778Dtdxw

    您可能还会发现这篇有些相关的博文很有帮助: https://blogs.msdn.microsoft.com/appconsult/2017/06/23/accessing-to-the-files-in-the-installation-folder-in-a-desktop-bridge-application/

    【讨论】:

    • 今天晚些时候有空我会分享一个 sn-p/sample。
    • 添加了一个 sn-p 并立即上传了一个示例。
    • 顺便说一句,Process.Start 打开一个控制台窗口。有什么办法不打开那个窗口?
    • 您要启动什么类型的应用程序?如果将 OutputType 设置为“Windows 应用程序”,则不会创建控制台窗口。
    【解决方案2】:

    desktop bridge support from Advanced Installer,专业版,可以为您的 AppX 包自动管理快捷方式参数。 (应用程序自动包含一个存根 EXE,它接受您的参数并将它们传递给您的主应用程序 EXE)。

    它还可以导入您的 AppX 包,因此您不必从头开始创建项目。导入完成后,您最终会在 Advanced Installer 中创建一个项目,从中可以创建 AppX 和 MSI(例如为 Win7 用户提供服务)。

    它还有一个 VS 扩展,使构建和调试更加容易,您可以在上面链接页面的视频中看到它的实际效果。

    免责声明:我在团队建设 Advanced Installer 工作。

    【讨论】:

    • 我没有专业版。高级安装程序在 appx 中注入一个可执行文件,上面写着要购买它。
    • 确实,这是针对试用用户的。我确实提到这是专业版支持的功能。获得许可证后,该消息就消失了。
    • 通过一些阅读,现在我可以使用 Windows 工具包打包和签署 appx 包。无需使用该试用软件(或可能是广告软件)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多