如何通过PowerShell调用Windows 10默认应用打开文件并监听进程退出
PowerShell 调用 Windows 照片应用打开视频并监听进程退出的实现方案
完全可以实现需求,以下是三种不同场景的可行方案:
方案1:直接向UWP版照片应用传入目标文件路径
你之前的写法仅需调整参数传递格式即可生效,Start-Process 需要用 -ArgumentList 指定传入UWP应用的参数:
# 替换为你的目标文件路径 $targetFile = "C:\Some\Path\To\File.mp4" # 启动照片应用并打开指定文件 Start-Process shell:AppsFolder\Microsoft.Windows.Photos_8wekyb3d8bbwe!App -ArgumentList $targetFile # 等待应用启动完成 Start-Sleep -Seconds 2 # 获取照片应用进程 $proc = Get-Process -Name Microsoft.Photos -ErrorAction SilentlyContinue if ($null -ne $proc) { # 阻塞等待进程退出 $proc.WaitForExit() # 此处编写进程退出后的后续逻辑 Write-Host "照片应用已关闭,继续执行后续任务" }
注意:该方案硬编码了照片应用的APPID,若系统版本或照片应用更新导致ID变动,需要手动修改APPID参数。
方案2:通用默认应用打开方案
如果不需要强制指定用照片应用打开,仅需要调用系统默认关联的MP4打开程序,可使用更通用的写法,不受应用ID变动影响:
$targetFile = "C:\Some\Path\To\File.mp4" # 直接启动文件,自动调用系统默认关联应用打开 Start-Process -FilePath $targetFile Start-Sleep -Seconds 2 # 匹配打开目标文件的照片应用进程 $fileName = [System.IO.Path]::GetFileNameWithoutExtension($targetFile) $proc = Get-Process -Name Microsoft.Photos -ErrorAction SilentlyContinue | Where-Object { $_.MainWindowTitle -like "$fileName*" } if ($null -ne $proc) { $proc.WaitForExit() Write-Host "文件编辑完成,继续执行后续逻辑" }
方案3:直接打开到视频编辑界面(最匹配需求)
照片应用提供了专属URI调用协议,可以直接调起视频编辑界面打开目标文件,无需手动点击编辑按钮:
# 加载编码所需依赖 Add-Type -AssemblyName System.Web $targetFile = "C:\Some\Path\To\File.mp4" # 将本地文件路径转换为URI编码格式 $fileUri = [System.Web.HttpUtility]::UrlEncode("file:///$($targetFile.Replace('\','/'))") # 直接调起照片应用的视频编辑界面打开目标文件 Start-Process "ms-photos:videoedit?InputFile=$fileUri" # 检测进程启动 $proc = $null for ($i = 0; $i -lt 10; $i++) { $proc = Get-Process -Name Microsoft.Photos -ErrorAction SilentlyContinue if ($null -ne $proc) { break } Start-Sleep -Milliseconds 500 } if ($null -ne $proc) { $proc.WaitForExit() # 后续执行逻辑 }
该方案不受默认应用设置、应用ID变动影响,强制调用照片应用打开编辑界面,适配性最强。
优化建议
- 若存在多开照片应用的场景,可在获取进程时增加启动时间筛选,取最近启动的进程,避免匹配到其他已打开的照片应用实例
- 固定等待2秒的逻辑可替换为上述方案3中的循环检测逻辑,适配应用启动速度较慢的设备
内容的提问来源于stack exchange,提问作者user3470887
相关产品推荐
相关产品推荐

