ストアアプリ(UWPアプリ)は実行ファイルをダブルクリックする等して直接実行しても、起動することができません。
たとえば、Microsoft Edgeの実行ファイルは下記場所にありますが(「Microsoft Edgeの場所」参照)、このファイルをダブルクリックしてもEdgeは起動しません。
C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\MicrosoftEdge.exe
ストアアプリを起動するには、URIスキームやIApplicationActivationManager::ActivateApplicationメソッドを使う必要があります。
今回は、PowerShellからIApplicationActivationManager::ActivateApplicationメソッドを使ってストアアプリを起動するコードを紹介します。
AppUserModelId(AUMID)の取得
ストアアプリを起動するには、まず、アプリを識別するためのID「AppUserModelId(AUMID)」を取得する必要があります。
foreach ($app in Get-AppxPackage | Sort-Object -Property Name) { foreach ($id in (Get-AppxPackageManifest $app).Package.Applications.Application.Id) { "Name:" + $app.Name + ", AUMID:" + $app.PackageFamilyName + "!" + $id } }
PowerShellで上記コードを実行し、お目当てのアプリのAUMIDを探します。
たとえば、電卓の場合は「Microsoft.WindowsCalculator_8wekyb3d8bbwe!App」、フォトの場合は「Microsoft.Windows.Photos_8wekyb3d8bbwe!App」となります。
IApplicationActivationManager::ActivateApplicationメソッドによるストアアプリの起動
AUMIDが取得できたら、次はいよいよアプリの起動です。
$code = @" using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; namespace ExecStoreApp { [ComImport, Guid("2e941141-7f97-4756-ba1d-9decde894a3d"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IApplicationActivationManager { IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] UInt32 options, [Out] out UInt32 processId); } [ComImport, Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")] public class ApplicationActivationManager : IApplicationActivationManager { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)/*, PreserveSig*/] public extern IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] UInt32 options, [Out] out UInt32 processId); } } "@ Add-Type $code $aumId = "Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge" #アプリのAppUserModelId(AUMID) $processId = 0 $aam = New-Object ExecStoreApp.ApplicationActivationManager $aam.ActivateApplication($aumId, $null, 0, [ref]$processId) "プロセスID:$processId"
上記コードを実行すると、変数$aumIdで指定しているEdgeが立ち上がります。
元々は下記記事で書いたC#のコードをPowerShell向けに書き直したものですが、こちらの方が使い勝手が良いですね!
ちなみに私は、「テストアプリ」(Microsoft.Windows.SecureAssessmentBrowser_cw5n1h2txyewy!App)等、表に出てこないアプリを確認する際に上記コードを使用しています。
この記事へのコメントはありません。