我正在努力从命令行(例如 PowerShell 或 CMD)启动 WSL“Ubuntu 20.04”商店应用程序(或任何商店应用程序)。
当我从“开始”菜单运行 Ubuntu 20.04 时,它会在一个带有 Ubuntu 图标和正确窗口标题(“Ubuntu 20.04 LTS”)的窗口中启动。我希望从命令行启动时获得相同的应用程序窗口。
我搜索了很多,发现这一页引用start shell:AppsFolder\{folder}!App
(例如start shell:AppsFolder\Microsoft.WindowsStore_8wekyb3d8bbwe!App
),但我无法让它在 Ubuntu Store App 上工作。对我来说这似乎有点复杂——有没有更简单的方法?如果没有,那它在 Ubuntu 上如何工作?
我熟悉该wsl
命令,但如果我wsl -d Ubuntu-20.04
从“开始”菜单运行,则出现的窗口会显示通用的 WSL/Linux/Penguin 图标,而不是 Ubuntu 图标。窗口标题也不会是C:\Windows\system32\wsl.exe
“Ubuntu 20.04 LTS”。
如果我wsl
从 CMD 运行相同的命令,它仍然有 CMD 图标。
也许我可以使用 DOS/CMDTITLE
命令,但我只想使用一个命令来启动 Store 应用。这可能吗?
相比之下,“普通”的.exe
Windows 应用程序可以很容易地从 CMD 或 PowerShell 启动。
我很高兴能有一个适用于 Ubuntu WSL 的解决方案,但如果有一个简单的(值得注意的是,可编程的) 运行方式全部Windows Store Apps,那太棒了。
答案1
将其作为单独的答案提供,因为正如您所注意到的,并非所有 WSL 发行版都会创建应用程序执行别名(来自我的其他答案)。
您看到的关于如何使用的页面start shell:/AppsFolder...
是正确的,但缺少一个关键点——!App
最后的最多但并非所有 UWP/Store 应用都如此。实际上,去年我在尝试备份我的 Minecraft Dungeons 进度时就遇到了这个问题,这很奇怪...
实际的语法是:
start shell:AppsFolder\PackageFamilyName!AppId
PackageFamilyName
通常与 中的目录名称匹配C:\Program Files\WindowsApps
,但除非您通过 UAC 提升了权限,否则该目录通常不可读。
而AppId
才是真正的挑战。它在包的 XML 清单中定义。它可以是开发人员想要的任何内容。大多数人确实使用App
,但也有例外(尤其是对于 WSL,似乎)。
下面是一个 PowerShell 代码片段,用于运行所有用户的 Appx 包(商店安装的包以及 Windows 自带的包)以及一些“系统”包:
Get-AppxPackage | ForEach-Object {
$packageFamilyName = $_.PackageFamilyName
$packageManifest = Get-AppxPackageManifest $_
$displayName = $packageManifest.Package.Properties.DisplayName
$appId = $packageManifest.Package.Applications.Application.Id
Write-Output "${displayName}: ${packageFamilyName}!${appId}"
}
Get-AppxPackage
:枚举已安装的软件包$_.PackageFamilyName
C:\Program Files\WindowsApps
:应与大多数非系统包中的目录名称匹配Get-AppxPackageManifest
返回应用程序的 XML 包清单- 然后我们通过遍历 XMLDocument 作为 PowerShell/.Net 属性来获取
DisplayName
和属性。AppId
您应该能够使用start
(CMD) 或Start-Process
(PowerShell) 得到的输出:
start-process shell:AppsFolder\36828agowa338.AlpineWSL_my43bytk1c4nr!alpinewsl
但当然要检查你的来自上述测试的实际输出Get-AppxPackage
,因为我相信系列名称可以根据商店发布而改变。
对我来说,这启动了一个带有 Alpine 的单独 Windows 控制台,带有 Alpine 徽标和标题。
答案2
简短回答:
从 CMD 或 PowerShell:
start ubuntu.exe
如果start
在 PowerShell 下没有别名,请尝试:
start-process ubuntu.exe
更多详情:
ubuntu.exe
是从 Microsoft Store 安装的“Ubuntu”应用程序的“应用程序执行别名”,尽管它也可能是:
ubuntu2004.exe
:如果你从商店安装了“版本号”为“Ubuntu 20.04”ubuntu1804.exe
:如果你安装了“版本”为“Ubuntu 18.04”- 并且我假设您还没有使用已弃用的 16.04 版本。
您可以通过以下方式查看管理应用程序执行别名在 Windows 设置中。许多 Store 应用都包含一个“假.exe
”程序,用于启动 Store 应用。您可以禁用它,但我假设它已启用。如果没有,当然,请启用它。
当您从“开始”菜单运行 Ubuntu 时,它当然会运行 Store 应用。此应用在旧版 Windows 控制台中运行 WSL,并执行一些其他操作,例如设置应用图标和字体。这几乎是我发现的与从命令行运行它的唯一区别。
当你ubuntu.exe
从命令行运行(或其他 WSL 应用执行别名之一)时,它将启动在ipconfig.exe
当前终端。例如,它与键入 相同。它保留了“所属”终端(由 CMD 或 PowerShell 启动)的当前特征 - 相同的应用程序图标、相同的字体等。
当使用start
(CMD) 或Start-Process
(PowerShell) 命令运行时,它会在 Windows 中启动一个单独的进程(而不是作为当前 shell 的子进程)。Windows 在新终端(默认情况下为 Windows 控制台)中启动它,并且大概 WSL 会做一些神奇的事情来表示“如果我是终端的所有者,则设置图标和字体”。
答案3
如果您已经安装了 ubuntu 2024,那么只需ubuntu2024
在命令窗口中输入并按回车键即可。它会在同一个命令窗口中登录 ubuntu。