リソース (Windows)
Microsoft Windowsにおけるリソース (英: resource) には、いくつかの意味がある。
計算資源としてのリソース
[編集]コンピュータの計算資源のことを意味する用語としてリソースが使われる。Windows Vista以降には、リソース モニターというシステムアプリケーションが標準搭載されており、CPUやメインメモリ、ネットワークの使用状況などを監視することができる。
埋め込みデータとしてのリソース
[編集]リソースは、実行ファイル(EXE)やダイナミックリンクライブラリ(DLL)に埋め込まれた読み込み専用のデータである。Portable Executableフォーマットにはリソース用の領域が存在する。
Windows APIでは、アプリケーションソフトウェアに含まれるリソースにアクセスする抽象化された方法を提供している。
種類
[編集]各リソースは型と名前を持ち、どちらも数値識別子か文字列である。
Windowsには予め定義されたリソースの型として以下のものがある。
プログラマは独自リソースの型を新たに定義することもできる。
C言語およびC++によるWin32デスクトップアプリケーション開発では、リソーススクリプトと呼ばれるテキストファイルを用いて上記リソースを記述する[1]。Microsoft Visual Studioにはリソースエディターが搭載されており、GUIを使用して直感的にリソーススクリプトを編集することもできる[2]。.NET Frameworkによる開発では、より抽象化・洗練されており、主にXMLリソースファイル(.resx)を使用してアセンブリのリソースを記述する[3]。さらにWPFでは、コントロールやスタイルなどのリソースをXAMLで記述することができる[4][5]。
その他、マニフェストリソースと呼ばれるXML形式のリソースファイルもある。こちらはビジュアルスタイルの有効化[6]、UACの権限昇格要求[7]やDPIスケーリング[8]など、OSの機能に対するアプリケーションの振る舞いを宣言するために使われる。Microsoft Visual C++では、リンカーオプションでマニフェストリソースをアプリケーションバイナリに結合できるが、プロジェクトファイル(.vcxproj)によってマニフェスト項目を設定したり、C/C++のソースファイル中に#pragma comment
ディレクティブを使ってマニフェスト項目を記述したりすることもできる[9]。
日本語や英語といった言語ごとにリソースを用意し、システムの言語設定に応じてUIをローカライズすることもできる。言語ごとのリソースのみを含むDLL(サテライトDLLまたはサテライトアセンブリ)を用意し、アプリケーションコードによって明示的に言語リソースを選択することもできる[10][11]。
使用法
[編集]Windowsがプログラムファイルに対応して表示するアイコンはEXEファイル内の最初のアイコンリソースである。EXEファイル内にアイコンリソースがない場合、標準のアイコンが表示される。
サードパーティ製のリソースエディター
[編集]EXEファイルやDLLファイルに埋め込まれたリソースを編集できるサードパーティ製のエディターがいくつかある。一般にアプリケーション内の文字列を別の言語に変換、アイコンやビットマップを変更、ショートカットキーの割り当てを変更するのに使う。
編集した影響でアプリケーションが正常に動作しなくなることもあり無保証である。
- リソーエディタ (RisohEditor) (オープンソース)
- XN Resource Editor 非公式版 (オープンソース)
- Resource Hacker (フリーウェア)
- Resource Tuner (シェアウェア)
システムリソース
[編集]システムリソースとはWindowsおよびアプリケーションが使用するKERNELリソース、USERリソース、GDIリソースと呼ばれるメモリ領域のことである。アプリケーションを管理するのがKERNELリソース、ダイアログボックスやウインドウなどの情報を格納するのがUSERリソース、フォントやビットマップ、アイコンなどの情報を格納するのがGDIリソースである。一般に起動しているアプリケーションが多いと使用するシステムリソースも多くなる。システムリソースの残量として表示されるのはいずれかの少ない方の容量でリソース不足になるとウインドウを開くことが出来なくなったりフリーズなどの不具合が発生する。
システムリソースという用語は16ビットOSであるWindows 3.x系で初めて登場した。Windows 3.0ではUSERとGDIの2つのリソースがありそれぞれ64KBのサイズであった。このサイズは16ビットCPUの1つのセグメントの大きさでありパフォーマンス上の理由でこのサイズとなった。しばしば勘違いされるがシステムリソースはWindowsで導入されたものであり64KBの制限はパフォーマンスを考慮した設計上の理由であるためMS-DOSやその互換性による制限ではない。Windows 3.1では容量不足の問題を解決するためUSERが128KBに拡張され利用方法の工夫でより少ないシステムリソースを使用するように改善された。
32ビットOSであるWindows 9x系ではシステムリソースが32ビット化され、2つのUSERリソースと1つのGDIリソースがそれぞれ2MB、合計で6MBの容量となった。しかし32ビットのシステムリソースは32ビットWindowsアプリケーションでしか使えず、16ビットWindowsアプリケーションと一部のOSの機能は互換性の理由で容量の少ない16ビットのシステムリソースを使用するため、多くのメモリを搭載していたとしても依然としてリソース不足になることがあった。つまりWindows 9x系で問題となるリソース不足は16ビットのシステムリソース不足のことである[12]。
Windows NT系のOSではシステムリソースは存在せず、同等の役目をするのはデスクトップヒープもしくはデスクトップアプリケーションヒープである。
ツール
[編集]脚注
[編集]- ^ リソース ファイル (C++) | Microsoft Learn
- ^ リソース エディター (C++) | Microsoft Learn
- ^ Create resource files - .NET | Microsoft Learn
- ^ XAML resources overview - WPF .NET | Microsoft Learn
- ^ How to define and reference a resource - WPF .NET | Microsoft Learn
- ^ Enabling Visual Styles - Win32 apps | Microsoft Learn
- ^ 常に管理者としてアプリケーションを実行させるには?[C#、VB、VS 2008] - @IT
- ^ Setting the default DPI awareness for a process (Windows) - Win32 apps | Microsoft Learn
- ^ /MANIFESTDEPENDENCY (Specify Manifest Dependencies) | Microsoft Learn
- ^ Creating a resource-only DLL | Microsoft Learn
- ^ Create satellite assemblies - .NET | Microsoft Learn
- ^ Windowsのシステムリソース解説 Back to the 1999