从命令行cmd启动Windows 10 UWP应用程序

问题描述 投票:0回答:5

我希望能够从单个命令行 (cmd Windows 10) 输入启动 Windows 10 UWP 应用程序。 我在将字符串连接在一起形成整个包名称时遇到问题(这需要是动态的,因为应用程序的结束字符串可能会随着每次部署而改变)。 这是我的逻辑:

  1. 在LocalAppData目录下找到应用包名(即packageName_postfix)
  2. 将“!App”附加到#1 中结果的末尾
  3. 将该字符串传递到启动函数中:

我已经可以找到 #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

有什么想法吗?

string windows cmd uwp concatenation
5个回答
11
投票

首先您必须知道此解决方案仅适用于 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>  
  • 可执行文件名称 - Application.Exe 名称(例如:MyApp.exe)
  • EntryPoint - 入口点标签应包含应用程序类的全名(参考:打开 -> App.xaml 文件 -> 应用程序 x:类名称)
  • AppExecutionAlias - 在命令提示符中键入别名以打开 应用;将 app.exe 名称指定为别名。

构建应用程序并运行一次!

打开命令提示符,输入别名 -> Enter

您还可以查看参考这里


3
投票

这一步也是如此!

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


0
投票

使用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
    启动。


0
投票

可以创建一个快捷方式(.lnk 文件),然后 shell 执行该快捷方式,这可能不是完美的解决方案,但至少应该非常快,例如使用 PowerShell 需要至少 250 毫秒启动,并且还显示控制台窗口,这可能是不需要的。有一个可以隐藏控制台窗口的工具:run-hidden

这也是一个任何人都可以使用的非常简单的解决方案,不需要编写和学习复杂的脚本或应用程序,简单的解决方案有时会被忽视。


0
投票

我这样做是因为我无法从快捷方式复制链接

使用 PowerShell

获取AppxPackage |选择-对象名称、PublisherId

您将获得所有软件包的安装位置。 (您可以按 | Select-String "mystring" 进行过滤

使用结构 Name_PublisherId!Name 它对我有用。

shell:appsFolder\Microsoft.ZuneMusic_8wekyb3d8bbwe!Microsoft.ZuneMusic

© www.soinside.com 2019 - 2024. All rights reserved.