インストールしたパッケージの中の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

参考書

WinUI3

WinUI3でアプリを作ろうと思ったときのとっかかりによかった。 msdocsに書いてある情報を、体系的に、順番に読みたいな、というときによいかも。(ただし英語)
この本で分からなかった、かゆいところに手が届かなかった部分を私は記事にしてる感じ。

C#①

表紙に書いてある通り、教科書として最適。 これからC#を勉強したいけど、ネットだけで勉強するのは効率が悪いから体系的に学べる本が欲しいときや、 ちょっとC#を勉強してコード書けるようになったけど、もう少し広く深く知りたいなというときによいと思う。
私は仕事で触れるコードを軸に、基本ネットで断片的にC#を学んだので、その知識の隙間を埋めて枝葉を広げるためにとても分かりやすかった。

C#②

C#の文法的に色々できるのは分かったが、いざ実装するときに、わかったことを使ってどう実装すればいいのか?と悩んだときに指針になりそうな本。
「プロパティ等の名前の付け方、どうすればいい?」「情報をクラス外部に見せるときに、プロパティにすべき?メソッドにすべき?」「異常だと判定したいとき、どんなときにどんな例外をスローすべき?」などなど、勉強になる部分が山ほどあった。
私のように「コードは書くけどこれであってるのか自信がない、レビューで指摘されるのが嫌だ、実装時の(心の)よりどころが欲しい」という人に最適。