我希望能够从单个命令行 (cmd Windows 10) 输入启动 Windows 10 UWP 应用程序。 我在将字符串连接在一起形成整个包名称时遇到问题(这需要是动态的,因为应用程序的结束字符串可能会随着每次部署而改变)。 这是我的逻辑:
我已经可以找到 #1,但由于某种原因,当我尝试将其附加到 #2 时,我得到了 NULL 值。这是我当前的命令:
1.) & 2.): 获取包名称并将其附加到“!App”
set "x=|dir %LocalAppData%\Packages /b | findstr packageName" & set "y=!App" & set "z=%x%%y%" & echo.%z%
3.):启动 UWP 应用程序
explorer.exe shell:appsFolder\packageName_postfix!App
有什么想法吗?
首先您必须知道此解决方案仅适用于 Windows 10 Fall Creators Update 及更高版本。此 API 将支持 Windows Insider Build 版本 16266 或更高版本。
在 Pacakge.appxmanifest 文件中添加此命名空间:
xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
然后添加此扩展程序:
<Extensions>
<uap5:Extension
Category="windows.appExecutionAlias"
Executable="MyApp.exe"
EntryPoint="MyApp.App">
<uap5:AppExecutionAlias>
<uap5:ExecutionAlias Alias="MyApp.exe" />
</uap5:AppExecutionAlias>
</uap5:Extension>
</Extensions>
构建应用程序并运行一次!
打开命令提示符,输入别名 -> Enter
您还可以查看参考这里
这一步也是如此!
explorer.exe shell:appsFolder\**packageName_postfix**!**App**
如何获取packageName_postfix和App?
转到Win+R >>
shell:appsFolder
在桌面上为您的应用程序创建快捷方式(右键单击)
尝试快捷方式的属性并复制它的路径后。
终于win+r explorer.exe
shell:appsFolder\Microsoft.ZuneMusic_8wekyb3d8bbwe!Microsoft.ZuneMusic
使用PowerShell添加一些“纯命令行方法”。 这些可以组装成通用脚本来查找启动机制,但更容易解释下面的各个组件,而无需立即“将它们全部放在一起”。
首先,请注意,您可能不再需要
explorer.exe
方法。 许多最近的 UWP 应用程序现在都包含用于命令行访问的应用程序执行别名。 自大约 5 年前推出此功能以来,它可在所有受支持的 Windows 10 和 11 版本中使用。
查找启动命令的起点始终是
AppxPackage
本身。 但有时找到包裹可能比其他包裹更困难:
“简单”情况——只需过滤
Get-AppxPackage
的返回结果以找到与 Name
匹配的结果。 以 Windows 终端为例:
Get-AppxPackage |? { $_.Name -like "*Terminal*" } | tee-object -Variable packageMatches
但是,有些应用程序的名称很奇怪。 例如,Minecraft Dungeons 包名称是
Microsoft.Lovika
,我认为这是其开发期间的项目名称。 除非您知道要查找的内容,否则您可能需要根据清单 DisplayName 执行(较慢的)搜索:
Get-AppxPackage |? {
(Get-AppxPackageManifest -Package $_.PackageFullName).Package.Properties.DisplayName -like "*Mine*"
} | tee -variable packageMatches
一旦获得
$packageMatches
结果,您可以使用两种不同方法之一来了解如何启动它:
使用应用程序执行别名的完全限定路径(如果可用)。 要确定这一点:
$packageMatches |% {
$executableName = ((Get-AppxPackageManifest -Package $_.PackageFullName).Package.Applications.Application.Executable)
if ($executableName) {
"Start-Process ""$($_.InstallLocation)\$executableName"""
} else {
"No executable found"
}
}
注意:返回的
Start-Process
格式仅用于从 PowerShell 启动,并带有带空格的路径的简化引用规则。 根据其他启动器的需要进行调整。
如果应用程序没有应用程序执行别名,您可以转而使用其他答案中介绍的
explorer.exe shell:appsFolder\<PackageFamilyName>!<Id>
方法。 要获取正确的名称和 ID:
$packageMatches |% {
"explorer.exe shell:appsFolder\$($_.PackageFamilyName)!$((Get-AppxPackageManifest -Package $_.PackageFullName).Package.Applications.Application.Id)"
}
例如,通过 Edge 作为应用程序安装的任何 PWA(渐进式 Web 应用程序)或网站都不会具有可执行文件,但可以通过
explorer.exe
启动。
可以创建一个快捷方式(.lnk 文件),然后 shell 执行该快捷方式,这可能不是完美的解决方案,但至少应该非常快,例如使用 PowerShell 需要至少 250 毫秒启动,并且还显示控制台窗口,这可能是不需要的。有一个可以隐藏控制台窗口的工具:run-hidden。
这也是一个任何人都可以使用的非常简单的解决方案,不需要编写和学习复杂的脚本或应用程序,简单的解决方案有时会被忽视。
我这样做是因为我无法从快捷方式复制链接
使用 PowerShell
获取AppxPackage |选择-对象名称、PublisherId
您将获得所有软件包的安装位置。 (您可以按 | Select-String "mystring" 进行过滤
使用结构 Name_PublisherId!Name 它对我有用。
shell:appsFolder\Microsoft.ZuneMusic_8wekyb3d8bbwe!Microsoft.ZuneMusic