ストアアプリ(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)等、表に出てこないアプリを確認する際に上記コードを使用しています。





















この記事へのコメントはありません。