Uwp 使用powershell启动Metro风格的应用程序

Uwp 使用powershell启动Metro风格的应用程序,uwp,windows-10,powershell-3.0,appx,start-process,Uwp,Windows 10,Powershell 3.0,Appx,Start Process,我正在尝试为windows 10编写一个powershell脚本,它将自动启动Metro风格的应用程序。 Start-Processcmdlet似乎应该可以工作,但除非提供.exe 例如,以下输入起作用: Start-Process 'C:\Program Files\Internet Explorer\iexplore.exe' 不幸的是,Metro风格的应用程序没有可执行文件。启动它们需要使用什么文件? 例如,如果我想启动Windows应用商店,我会怎么做 谢谢如果appx注册了U

我正在尝试为windows 10编写一个powershell脚本,它将自动启动Metro风格的应用程序。
Start-Process
cmdlet似乎应该可以工作,但除非提供
.exe

例如,以下输入起作用:

    Start-Process 'C:\Program Files\Internet Explorer\iexplore.exe'
不幸的是,Metro风格的应用程序没有可执行文件。启动它们需要使用什么文件? 例如,如果我想启动Windows应用商店,我会怎么做


谢谢

如果appx注册了URI协议方案,您可以使用该方案启动它。例如,要在Win8/Win10中启动windows应用商店,请使用以下代码:

    Start-Process ms-windows-store:

我感到惊讶的是,用于启动metro风格应用程序的文档太少了

商店应用程序只能由shell启动。试试这个:

explorer.exe shell:AppsFolder\Microsoft.WindowsAlarms_8wekyb3d8bbwe!App

我不知道有什么真正通用的方法可以做到这一点,但你可以通过一些中间检查来找到答案

注意:我讨厌使用PowerShell,所以请原谅从CMD调用PS的奇怪之处

第一步:找出你有哪些应用

powershell Get AppXPackage
将生成所有这些文件的列表。假设您特别希望启动桌面应用程序转换器,以便在利用自动化的同时处理一些百年补丁。因此,我将使用
findstr
来过滤返回的内容,查询appx列表中可能匹配的内容

第二步:弄清楚你是否已经拥有了你想要的应用

powershell获取AppXPackage | findstr/i桌面

虽然这给了我很多结果,但我可以清楚地看到返回的匹配集如下所示:

Name              : Microsoft.DesktopAppConverter
PackageFullName   : Microsoft.DesktopAppConverter_2.1.1.0_x64__8wekyb3d8bbwe
InstallLocation   : C:\Program Files\WindowsApps\Microsoft.DesktopAppConverter_2.1.1.0_x64__8wekyb3d8bbwe
PackageFamilyName : Microsoft.DesktopAppConverter_8wekyb3d8bbwe
如果我没有得到像这样的东西,自然下一步是得到该死的东西:)所以下一步,这可能会变得棘手,你的里程可能会有所不同:

步骤3:找到应用程序存在的位置,您可以在其中实际调用它: 我为什么要这样做?因为如果我尝试从AppXPackage查询返回的路径运行它,我将得到
“访问被拒绝”。


然后,您应该能够获得该结果路径,并能够从该路径运行该路径。

您可以通过在注册表中导航到此处,找到用于启动进程的命令:Computer\HKEY\u CLASSES\u ROOT\Extensions\constract\Windows.Protocol\PackageId

然后展开ActivatableClassId,然后展开应用程序,然后在CustomProperties文件夹中查看Name的值

启动进程必须使用PowerShell运行,因为CMD中无法识别


我用它来启动Windows Mail应用程序。

如果下载Windows SDK,其中有一个可执行文件,名为:
microsoft.windows.softwarelogo.appxlauncher.exe
可用于启动UWP应用程序

格式为:
microsoft.windows.softwarelogo.appxlauncher.exe!应用程序


通过查看kayleeFrye_OnDeck的答案,您可以获得应用程序的packageFamilyName。

据称Metro风格的“应用商店”应用程序没有传统的可执行文件,因此我开始挖掘一些,它们确实有。从旧的skool管理cmd.exe尝试:

 dir "%ProgramW6432%\WindowsApps"
 dir "%ProgramW6432%\WindowsApps\Microsoft.WindowsCalculator_10.1903.21.0_x64__8wekyb3d8bbwe"      Directory of C:\Program Files\WindowsApps\Microsoft.WindowsCalculator_10.1903.21.0_x64__8wekyb3d8bbwe

 04/30/2019  05:58 PM    <DIR>          .
 04/30/2019  05:58 PM    <DIR>          ..
 04/30/2019  05:58 PM            35,314 AppxBlockMap.xml
 04/30/2019  05:58 PM             3,860 AppxManifest.xml
 04/30/2019  05:58 PM    <DIR>          AppxMetadata
 04/30/2019  05:58 PM            11,296 AppxSignature.p7x
 04/30/2019  05:58 PM    <DIR>          Assets
 04/30/2019  05:58 PM         4,188,672 Calculator.exe
 04/30/2019  05:58 PM            95,744 CalculatorApp.winmd
 04/30/2019  05:58 PM           286,920 resources.pri
 04/30/2019  05:58 PM    <DIR>          WinMetadata
目录“%ProgramW6432%\WindowsApps” 目录“%ProgramW6432%\WindowsApps\Microsoft.WindowsCalculator\u 10.1903.21.0\u x64\u 8wekyb3d8bbwe”C:\Program Files\WindowsApps\Microsoft.WindowsCalculator\u 10.1903.21.0\u x64\u 8wekyb3d8bbwe目录 2019年4月30日下午5:58。 2019年4月30日下午5:58。。 2019年4月30日05:58 PM 35314 AppxBlockMap.xml 2019年4月30日05:58 PM 3860 AppxManifest.xml 2019年4月30日下午5:58 AppxMetadata 2019年4月30日05:58 PM 11296 AppxSignature.p7x 2019年4月30日下午5:58 2019年4月30日05:58 PM 4188672 Calculator.exe 2019年4月30日05:58 PM 95744 CalculatorApp.winmd 2019年4月30日05:58 PM 286920 resources.pri 2019年4月30日下午5:58
帮助我找到Ubuntu的exe,
%ProgramW6432%\WindowsApps\CanonicalGroupLimited.Ubuntu18.04onWindows\u 1804.2019.522.0\u x64\u 79rhkp1fndgsc\ubuntu1804.exe“

任何因为WindowsTerminal而出现在这里的人,我为我的个人资料编写了这个函数,这样我就可以不用从键盘上移动双手来提升:

function term {
    $pkgName = (Get-AppxPackage -Name Microsoft.WindowsTerminal).PackageFamilyName
    $Proc = @{
        FilePath = 'explorer.exe'
        ArgumentList = "shell:AppsFolder\$pkgName!App"
        Verb = 'RunAs'
    }
    Start-Process @proc
}
现有答案中有一些有用的信息,但让我试着将这些信息与自动化步骤结合起来。
这个答案假设每个AppX包至少有一个特定于应用程序的URI协议。如果给定的应用程序不是这样,则通过
shell:
URI方案调用它,如中所示(将这样的URI直接传递给
Start进程就足够了;例如,
启动进程shell:AppsFolder\Microsoft.windowsalms\u 8wekyb3d8bbwe!App
)。请注意,您需要知道应用程序族名称,其中包括抽象发布者ID(
8wekyb3d8bbwe

获取AppXPackage
有助于发现-请参阅下文

Windows 8+Metro风格的应用程序(过时术语)a.k.aUWP应用程序/AppX包最好通过URL使用特定于应用程序的协议方案启动

例如,Calculator Windows 10应用程序定义了两个URL协议名称,
Calculator
ms Calculator
,这两个名称都可以与后面的
启动进程一起使用:

#注意后面的“:”
启动流程计算器:#或:启动流程ms计算器:
Microsoft Edge支持协议
Microsoft Edge
,因此您可以打开给定的URL,例如
http://example.org
在Edge中,如下所示:

启动进程microsoft edge:http://example.org
请注意,在本例中,协议名称后的
后面跟着一个要传递给目标应用程序的参数

注意事项:从PowerShell Core 7.0.0-preview.5开始,yo
function term {
    $pkgName = (Get-AppxPackage -Name Microsoft.WindowsTerminal).PackageFamilyName
    $Proc = @{
        FilePath = 'explorer.exe'
        ArgumentList = "shell:AppsFolder\$pkgName!App"
        Verb = 'RunAs'
    }
    Start-Process @proc
}