我想自动化 Microsoft Windows 10 通用 Windows 平台软件应用程序的启动过程。
根据这个问题,如果不采取临时措施,这个问题仍然无法解决。
解决方法是编写一个批处理文件,使用 Microsoft Windows PowerShell 集成 shell 脚本环境来启动特定的软件应用程序。
但是,文件夹中没有直接的路径指向该特定的软件应用程序C:\Windows\SystemApps\
。
有什么线索吗?
在下面已经提供的评论和前两个答案之后更新:
该应用程序被称为“天气“。它的名字很长,似乎是”微软 MSN Bing 天气“。
下面给出了基于 Microsoft PowerShell 集成 Shell 脚本环境的自动化解决方案的答案。
一个简单的手动解决方法如下:
使用开始菜单(和不是这开始屏幕覆盖整个桌面视图(如全屏模式)时,将“天气“桌面视图上的平铺。
按Windows+R组合键弹出“跑步“ 对话框。
类型
shell:startup
和Enter密钥。复制“天气“从桌面视图快捷方式进入
StartUp
文件夹内。
答案1
Windows 商店应用程序有一些怪癖,但可以处理。Powershell 将 Windows 商店应用程序称为AppxPackages
,但一个包中可以有多个应用程序,因此我们还需要检查AppxManifest.xml
文件以获取更多信息。
首先,您需要包名称,您可以通过将快捷方式拖到桌面,然后检查属性> Targettype(您只需要一个唯一的名称)来找到它:
现在在 Powershell 中,我们得到了包 - 您可以通过将快捷方式拖到桌面,然后检查属性 > Targettype 来找到包名称:
$pkg = Get-AppxPackage *Communication*
然后我们获取其清单的 XML 数据:
$manifest = [xml](get-content "$($pkg.InstallLocation)/AppxManifest.xml")
然后我们从 XML 中获取包 ID:
$ID = $manifest.Package.Applications.Application.id
为了确保万无一失,我们检查以确保只有一个应用程序 ID:
if ($id.count -gt 1) {Write-Error "Found more than one app ID in package!: $id";break}
就我而言,我有多个,因此我将手动指定 ID:
$ID = 'microsoft.windowslive.calendar'
最后,我们启动应用程序:
Start-Process explorer.exe -ArgumentList "shell:appsfolder\$($pkg.PackageFamilyName)!$id"
或者作为单个脚本:
$pkg = get-appxpackage *Calculator*
$manifest = [xml](get-content "$($pkg.InstallLocation)/AppxManifest.xml")
$id = $manifest.Package.Applications.Application.id
if ($id.count -gt 1) {Write-Error "Found more than one app ID in package!: $id";break}
Start-Process explorer.exe -ArgumentList "shell:appsfolder\$($pkg.PackageFamilyName)!$id"
请注意:这必须以当前登录用户的身份运行。
答案2
您可以像这样调用 UWP 应用程序:
explorer.exe shell:appsFolder\<PackageFamilyName>!<PackageName>
如果在 PowerShell 中运行以下命令:
Get-AppxPackage | Select-Object PackageFamilyName, Name
您将获得PackageFamilyName
和PackageName
返回。然后您可以在上述命令中使用它。例如,如果您想启动 Windows 应用商店:
explorer.exe shell:appsFolder\Microsoft.WindowsStore_8wekyb3d8bbwe!Microsoft.WindowsStore
然后,您可以编写自己的Start-AppxPackage
函数(为什么目前还没有本机的 cmdlet,这对我来说是个谜)
Function Start-AppxPackage {
Param(
[parameter(ValueFromPipelineByPropertyName)]
[string]$PackageFamilyName,
[parameter(ValueFromPipelineByPropertyName)]
[string]$Name
)
Process {
$Invoke = "explorer.exe shell:appsFolder\{0}!{1}" -f $PackageFamilyName, $Name
Invoke-Expression $Invoke
}
}
然后你可以像这样简单地使用它,例如:
Get-AppxPackage *photos* | Start-AppxPackage
您还可以一次启动多个应用程序:
Get-AppxPackage | ? {($_.Name -like '*photos*') -or ($_.Name -like '*store*')} | Start-AppxPackage
然后可以将此命令包含在启动脚本或类似脚本中
然而,老实说,通过资源管理器启动 shell 应用程序似乎存在严重错误。过了一会儿,它只会在我的文档上打开资源管理器,而不是启动正确的 shell 应用程序。