.NET TIPS

マニフェスト・ファイルをアプリケーションに組み込むには?

デジタルアドバンテージ
2004/11/26

 「TIPS:WindowsアプリケーションをWindows XPスタイルの外観にするには?」の後半では、マニフェスト・ファイルを用いたWindows XPスタイルの実装方法について解説しているが、この方法では実行ファイルとは別に、マニフェスト・ファイルが必要となる。

 本稿では、マニフェスト・ファイルをアプリケーションの実行ファイルに組み込んで、1つのファイルにまとめてしまう方法について解説する。

Visual Studio .NETを利用したマニフェスト・ファイルの組み込み

 Visual Stuio .NET(以下、VS.NET)を利用してマニフェスト・ファイルを組み込むための具体的な手順を以下の図にまとめた。マニフェスト・ファイルは、.NETの機能ではなくWin32システムの機能なので、Win32リソースとしてアプリケーションへ組み込む必要がある

VS.NETを使ったWin32リソース(マニフェスト・ファイル)の組み込み
Win32リソースであるマニフェスト・ファイルをアプリケーションに埋め込むには、次の手順を実行する。なおこの方法で、自作アプリケーション以外のWin32リソースを変更したり、抽出したりすると、著作権上問題になる可能性があるので注意すること。
  VS.NET IDEのメニューから[ファイル]−[開く]−[ファイル]を実行する。これにより、[ファイルを開く]ダイアログが表示されるので、そこでアプリケーションの実行ファイル(この例では「WindowsApplication1.exe」)を選択する。これにより、アプリケーションがWin32リソースとして開かれる(アプリケーションの実行ファイルがリソースとして開けない場合には、ダイアログの[開く]ボタンの右にある[▼]ボタンをクリックして、そこで表示されるメニューから[ファイルを開くアプリケーションの選択]をクリックする。これにより[ファイルを開くアプリケーションの選択]ダイアログが表示されるので、そこから「リソース エディタ」を選択すればよい)。
  リソース・エディタに表示されたアプリケーションの実行ファイル(この例では「WindowsApplication1.exe」)を右クリックしてコンテキスト・メニューを表示し、そのメニューから[リソースの追加]を選択する。これにより、[リソースの追加]ダイアログが表示される。
  [リソースの追加]ダイアログの[インポート]ボタンをクリックすると、[インポート]ダイアログ([ファイルを開く]ダイアログと同じ形式)が表示されるので、このダイアログで作成済みのマニフェスト・ファイル(本稿の例では「WindowsApplication1.exe.manifest」)を選択する。これにより[カスタム リソース の種類]ダイアログが表示される。
  [カスタム リソース の種類]ダイアログで、[リソースの種類]として「RT_MANIFEST」を入力して[OK]ボタンをクリックする。
  「RT_MANIFEST」という種類のリソースとしてマニフェスト・ファイルがアプリケーションに追加される。
  「RT_MANIFEST」リソースのIDを「1」に変更してアプリケーションの実行ファイルを保存する。

 上記の手順を行い、リソースが追加された実行ファイル(.exeファイル)を実行すると、Windows XPスタイルが適用されているはずだ。

マニフェスト・ファイル組み込みの自動化

 VS.NET(Visual C# .NETおよびVisual Basic .NET)は、.NET用の開発環境である。そのため、Win32リソースであるマニフェスト・ファイルの組み込みをVS.NETで自動化することは難しい。しかし、コマンドラインでビルドを行えば、これを簡単に自動化することができる。

 具体的には、次のコマンドラインの例(VS.NETで自動生成したWindowsアプリケーションのプロジェクトの場合)のように、Win32リソース用のオプション(C#では「/win32res」オプション、VB.NETでは「/win32resource」オプション)を指定してビルドを行えばよい。

// C#の場合
csc.exe /win32res:WindowsApplication1.res /resource:Form1.resources,WindowsApplication1.Form1.resources /target:winexe /out:StyleWinXP.exe Form1.cs AssemblyInfo.cs
' VB.NETの場合
vbc.exe /win32resource:WindowsApplication1.res /resource:Form1.resources,WindowsApplication1.Form1.resources /rootnamespace:WindowsApplication1 /target:winexe /out:StyleWinXP.exe /reference:System.dll /reference:System.Windows.Forms.dll /reference:System.Drawing.dll /imports:System.Windows.Forms Form1.vb AssemblyInfo.vb

 Win32リソース・オプションに指定するWin32リソース・ファイル(.resファイル。本稿の例では「WindowsApplication1.res」)は、次の画面の手順により作成できる。

VS.NETを使ったWin32リソース・ファイル(.resファイル)の作成
Win32リソースであるマニフェスト・ファイルをアプリケーションに埋め込むには、Win32リソース・ファイル(.resファイル)を作成する必要がある。VS.NETでこれを作成するには、次の手順を実行する(作業手順は「VS.NETを使ったWin32リソース(マニフェスト・ファイル)の組み込み」の手順とほぼ同じ)。
  VS.NET IDEのメニューから[ファイル]−[新規作成]−[ファイル]を実行して、[新しいファイル]ダイアログを開く。そのダイアログの[Visual C++]カテゴリの[テンプレート]の一覧から「リソース テンプレート ファイル(rct)」を選択してファイルを作成する。
  リソース・エディタに表示されたリソース・テンプレート・ファイル(.rctファイル。この例では「ResTempl1.rct」)を選択する。
  リソース・テンプレート・ファイルが選択された状態で[プロパティ]ウィンドウの[Mfc Mode]プロパティを「False」に設定変更する。
  リソース・テンプレート・ファイルを右クリックしてコンテキスト・メニューを表示し、そのメニューから[リソースの追加]を選択する。これにより、[リソースの追加]ダイアログが表示される。
  [リソースの追加]ダイアログの[インポート]ボタンをクリックすると、[インポート]ダイアログ([ファイルを開く]ダイアログと同じ形式)が表示されるので、このダイアログで作成済みのマニフェスト・ファイル(本稿の例では「WindowsApplication1.exe.manifest」)を選択する。これにより[カスタム リソース の種類]ダイアログが表示される。[カスタム リソース の種類]ダイアログで、[リソースの種類]として「RT_MANIFEST」を入力して[OK]ボタンをクリックする。
  「RT_MANIFEST」という種類のリソースとしてマニフェスト・ファイルがリソース・テンプレート・ファイルに追加される。その「RT_MANIFEST」リソースを選択して、[プロパティ]ウィンドウの[ID]プロパティを「1」に変更する。

 以上でWin32リソースの作成は完了だ。後は次の画面の手順で、これをWin32リソース・ファイル(.resファイル)として保存すればよい。ここで注意してほしいのは、必ず.resファイルの形式で保存する必要があるということだ。次の画面でその手順を示す。

Win32リソース・ファイル(.resファイル)の保存
リソース・テンプレート・ファイル(.rctファイル。この例では「ResTempl1.rct」)をWin32リソース・ファイル(.resファイル。この例では「WindowsApplication1.res」)として保存する。この[名前を付けてファイルを保存]ダイアログを開くには、VS.NET IDEのメニューから[ファイル]−[名前を付けて <拡張子を除くファイル名> を保存](本稿の例では[名前を付けて ResTempl1 を保存])を選択すればよい。
  保存するWin32リソース・ファイルの名前(この例では「WindowsApplication1.res」)を指定する。
  [ファイルの種類]は「32 ビット リソース ファイル (*.res)」を選択する。デフォルトでは違う種類(「リソース テンプレート (*.rct)」)になっているので、間違えないように注意すること。

 以上の手順で作成したVS.NETのサンプル・プロジェクトは、次のリンクからダウンロードできる。

 プロジェクトをビルドするためのコマンドライン内容は、バッチ・ファイル「BuildScript.bat」にまとめている。このバッチ・ファイルを実行すると、Win32リソース・ファイルを埋め込んだアプリケーション「StyleWinXP.exe」と、埋め込んでいないアプリケーション「StyleClassic.exe」が生成される。End of Article

カテゴリ:Windowsフォーム 処理対象:コントロール
カテゴリ:Visual Studio .NET 処理対象:リソース
関連TIPS:WindowsアプリケーションをWindows XPスタイルの外観にするには?

この記事と関連性の高い別の.NET TIPS
VS.NETで画像などのリソースを利用するには?(組込編)
WindowsアプリケーションをWindows XPスタイルの外観にするには?
VS.NETで画像などのリソースを利用するには?(準備編)
実行ファイルからアプリケーションのアイコンを取得するには?
VS.NETで画像などのリソースを利用するには?(読込編)
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

更新履歴
【2004/11/26】本記事の一部に以下のような誤りがありました。お詫びして訂正させていただきます。

// C#の場合
csc.exe /win32res:WindowsApplication1.res /resource:Form1.resx /target:winexe /out:StyleWinXP.exe Form1.cs AssemblyInfo.cs
// C#の場合
csc.exe /win32res:WindowsApplication1.res /resource:Form1.resources,WindowsApplication1.Form1.resources /target:winexe /out:StyleWinXP.exe Form1.cs AssemblyInfo.cs

' VB.NETの場合
vbc.exe /win32resource:WindowsApplication1.res /resource:Form1.resx /target:winexe /out:StyleWinXP.exe /reference:System.dll /reference:System.Windows.Forms.dll /reference:System.Drawing.dll /imports:System.Windows.Forms Form1.vb AssemblyInfo.vb
' VB.NETの場合
vbc.exe /win32resource:WindowsApplication1.res /resource:Form1.resources,WindowsApplication1.Form1.resources /rootnamespace:WindowsApplication1 /target:winexe /out:StyleWinXP.exe /reference:System.dll /reference:System.Windows.Forms.dll /reference:System.Drawing.dll /imports:System.Windows.Forms Form1.vb AssemblyInfo.vb




Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間