(2016/01/29 追記:Win10 以降の UWP…Universal Windows Platform Appでは、.NET を使うAppは全て.NET Native で配布されます。このため、この記事後半のC#/C++ の見分け方は通用しなくなっています。この記事の例・PICT8の用に、全てNativeBinaryの形です。)
※ この記事ではC#とVBの.NET 組を合わせてC#と表記しています。VB派の人ごめん。
タスクマネージャの詳細タブを開き、ヘッダで右クリック→列の選択と進み、「パッケージ名」をチェックします。
タスクマネージャ→詳細→ヘッダを右クリックして「列の選択」 |
すると、このように「アプリのパッケージ名」に対応する「プロセスの実行ファイル名」が分かります。
アプリ名とプロセス実行ファイル名 |
ここで実行ファイル名が「WWAHost.exe」になっているものはHTML/JS アプリです。
なっていないものはC# 又は C++ アプリです。
C#とC++を見分けるには…色々方法有りそうですが、僕が使っているのは Visual Studio と一緒に入るWindows SDK の CorFlags.exe を使う方法です。
実行ファイルが.NET モノの場合ヘッダには必ずCLR ヘッダが付き、C++ストアアプリ==ネイティブ実行ファイルには付きません(OSのローダはここを見てCLRをロードするか決めるので)。CorFlags に実行ファイル名をパラメータとして渡すことで、このCLR ヘッダ情報を確認する事が出来ます。
CLR ヘッダ情報が表示される場合、それは.NET アプリケーションです。
表示されない場合、それは ネイティブ アプリケーションです。
C#ストアアプリ Wheel World Clock に対してCorFlags.exe を実行した様子 CLR ヘッダが存在しているのが分かります |
C++ ストアアプリ に対してCorFlags.exe を実行した様子 CLR ヘッダが含まれないためエラーとなります。 |
ちなみに、Program Files\WindowsApps を覗くと、HTML AppはHTMLやJavascript ファイルの中身を覗くことができます。ただ微妙にリバースエンジニアリングに片足突っ込んでいる気配もするので…この辺りにしておきます。
※ 管理者権限のコマンドプロンプトからはWindowsApps にアクセスできますが、エクスプローラーでアクセスするには結構色々権限を弄る必要がある+戻すのも大変なのであまりお勧めしません。
※ Win8 ターゲットのC#/C++ XAML アプリは、この方法でXAMLも覗くことができました。ビルドターゲットをWin8.1 にしている場合、XAMLはXBFにコンパイルされた形でインストールされるのでダメですが。
余談
これで色々動かしてるとすぐ判るのですが、プリインストールされているMicrosoft のストアアプリは殆どがHTML/JS アプリです。逆に、ストアに上がっているものはC#が圧倒的に多い感じがします。たまにHTML、まれにC++的な。ゲームだとC++が多いのかもしれないですが、僕はあまりゲームやらないので良く判りません。
余談2
現在はVS2015 で試すことができる面白技術、.NET Native をご存知でしょうか。.NET で書いたアプリをストアからDLする際、実行環境のアーキテクチャに応じてNativeにコンパイルし直した状態でインストールされるという、何周も回ってよくわからないけど凄い感じの技術です。これを使えば.NET Frameworkが全く入って無くてもC# ストアアプリが実行できるんだぜ!とMSさんは豪語しています(そんな環境があるのかどうかはともかく)。
確認してみましょう。C# で書いたストアアプリ PICT8 をこの.NET Native 有効にしてビルドし、実行ファイルを確認すると…
.NET Native アプリでCorFlags.exe を実行した様子 |
おおおお、確かにネイティブバイナリです。凄い。
0 件のコメント:
コメントを投稿