インストールしたパッケージの中のexeをAliasでほかのプログラムから呼べるようにする

WInUI3関連記事

https://tera1707.com/entry/2022/02/06/144447#WinUI3

やりたいこと

WinUI3で作成したexe(msixでパッケージされたものでインストールしたもの)を、他のプログラムから呼べるようにしたい。

ざっとみたところ、「Alias」というのを付けると、どこからでも呼べるようになるっぽい。 やり方調べたい。

やり方

Package.appxmanifestに、下記を書く。

  • <Package>の先頭に、下記を書く。
    • xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
    • xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
  • IgnorableNamespacesに、uap3desktopを追加する。
<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
  xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
  IgnorableNamespaces="uap rescap uap3 desktop">

次に、<Application>の中に、下記を追記する。

     <Extensions>
            <uap3:Extension
                   Category="windows.appExecutionAlias"
                   Executable="WinUI3PJTest\WinUI3PJTest.exe"  ★ここが、動いてほしいexeのパス
                   EntryPoint="Windows.FullTrustApplication">★これはおまじない
                <uap3:AppExecutionAlias>
                    <desktop:ExecutionAlias Alias="WinUI3PJTestAlias.exe" />
                </uap3:AppExecutionAlias> ★ここがAlias。".exe"で終わらないといけない
            </uap3:Extension>
        </Extensions>

上記を追記したPackage.appxmanifest全体は下記の通り。

<?xml version="1.0" encoding="utf-8"?>

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
  xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
  IgnorableNamespaces="uap rescap uap3 desktop">

  <Identity
    Name="06bf9954-f1d3-4269-b9ff-078b5e4fae1d"
    Publisher="CN=masa"
    Version="1.0.0.0" />

  <Properties>
    <DisplayName>WinUI3PJTest (Package)</DisplayName>
    <PublisherDisplayName>masa</PublisherDisplayName>
    <Logo>Images\StoreLogo.png</Logo>
  </Properties>

  <Dependencies>
    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
  </Dependencies>

  <Resources>
    <Resource Language="x-generate"/>
  </Resources>

  <Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="$targetentrypoint$">
      <uap:VisualElements
        DisplayName="WinUI3PJTest (Package)"
        Description="WinUI3PJTest (Package)"
        BackgroundColor="transparent"
        Square150x150Logo="Images\Square150x150Logo.png"
        Square44x44Logo="Images\Square44x44Logo.png">
        <uap:DefaultTile Wide310x150Logo="Images\Wide310x150Logo.png" />
        <uap:SplashScreen Image="Images\SplashScreen.png" />
      </uap:VisualElements>

        <Extensions>
            <uap3:Extension
                   Category="windows.appExecutionAlias"
                   Executable="WinUI3PJTest\WinUI3PJTest.exe"
                   EntryPoint="Windows.FullTrustApplication">
                <uap3:AppExecutionAlias>
                    <desktop:ExecutionAlias Alias="WinUI3PJTestAlias.exe" />
                </uap3:AppExecutionAlias>
            </uap3:Extension>
        </Extensions>
        
    </Application>
  </Applications>

  <Capabilities>
    <rescap:Capability Name="runFullTrust" />
  </Capabilities>
</Package>

こうしておくと

別のプログラムから、

Process.Start("WinUI3PJTestAlias.exe");

等で、このプログラム("WinUI3PJTest\WinUI3PJTest.exe")を呼べるようになる。

参考

公式情報。

docs.microsoft.com