如何通过命令行启动MSIX安装的应用?含参数启动及WinForms适配方案
命令行启动MSIX应用及带参数启动的解决方案
一、基础命令行启动MSIX应用
你提到的explorer.exe shell:appsFolder\<PackageFamilyName>!<App ID>确实是启动MSIX应用的有效方式,补充两种获取关键信息的快捷方法:
- 获取PackageFamilyName:用PowerShell执行以下命令(替换
你的应用名称为实际名称):Get-AppxPackage | Where-Object {$_.Name -match "你的应用名称"} | Select-Object PackageFamilyName - 获取App ID:打开
Package.appxmanifest文件,找到<Applications>节点下的<Application>标签,其Id属性值就是App ID。
二、带参数启动的可行方式
官方并非完全禁止带参数启动,你可以通过以下两种方式实现:
直接通过命令行传递参数
- 在CMD中使用
start命令:start shell:appsFolder\<PackageFamilyName>!<App ID> "参数1 参数2" - 在PowerShell中使用
Start-Process:Start-Process "shell:appsFolder\<PackageFamilyName>!<App ID>" -ArgumentList "参数1", "参数2"
注意:部分应用需要在
Package.appxmanifest中声明支持命令行参数,确保应用的<Application>节点下包含对应的扩展配置。- 在CMD中使用
通过自定义URI协议传递参数
在Package.appxmanifest中添加协议扩展:<Applications> <Application Id="App" ...> <!-- 原有配置 --> <Extensions> <uap:Extension Category="windows.protocol"> <uap:Protocol Name="myappcmd"> <uap:DisplayName>My App Command Protocol</uap:DisplayName> </uap:Protocol> </uap:Extension> </Extensions> </Application> </Applications>打包安装后,即可通过以下命令启动并传递参数:
myappcmd://?param=value1&another=value2WinForms应用中可以通过
Environment.GetCommandLineArgs()获取协议URL,再解析其中的参数。
三、WinForms应用的替代方案(若上述方法受限)
如果因沙箱或配置限制无法直接传递参数,可以尝试以下两种方案:
共享临时文件传递参数
- 命令行启动前,将参数写入应用可访问的临时文件(如
%LOCALAPPDATA%\YourApp\args.txt,MSIX应用对该目录有读写权限); - 启动MSIX应用后,在WinForms的启动逻辑中读取该文件的参数,处理完成后删除文件。
- 命令行启动前,将参数写入应用可访问的临时文件(如
注册表传递参数
- 命令行中写入参数到
HKCU\Software\YourApp\LaunchArgs注册表项; - WinForms应用启动后读取该注册表项,处理参数后删除对应项。
注意:MSIX应用默认只能访问沙箱内的注册表分支,需在Package.appxmanifest中添加注册表权限声明,或使用HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage下的对应路径。
- 命令行中写入参数到
内容的提问来源于stack exchange,提问作者Dave Doknjas
相关产品推荐
相关产品推荐

