4.1 リソースの管理
4. 新機能や機能変更に伴う互換性問題
この章では、以下のような新機能や機能変更に伴う、互換性問題について紹介します。
フォルダー構造の変更点
Windows Vista と Windows 7 では、ユーザー データやアプリケーション データを格納するためのフォルダーの構造が大幅に変更されました。おもな変更点は、以下の通りです。
項目 |
Windows XP |
Windows Vista/7 |
ユーザー プロファイルのルート フォルダー名を変更 |
Documents and Settings |
Users |
ユーザーごとのアプリケーション データ (ローミングあり/なし) を一元化 |
<username>\Application Data <username>\LocalSettings\Application Data |
<username>\AppData |
ユーザーごとのアプリケーション データ フォルダーの場所を変更 |
<username>\Application Data |
<username>\AppData\Roaming |
<username>\Local Settings\Application Data |
<username>\AppData\Local |
All Users プロファイルのフォルダー名を変更 |
All Users |
Public |
All Users プロファイルのアプリケーション データ フォルダーの場所を変更 |
All Users\Application Data |
C:\ProgramData |
ごみ箱を各ユーザー プロファイル フォルダーへ作成 |
X:Recycler\<SID> |
Users\<username>\$Recycle.bin |
ディレクトリの接合ポイント
フォルダー構造が変更されると、既存アプリケーションが正しくフォルダーにアクセスできないために、動作しない可能性がでてきます。そこで、救済策として「接合点」が用意されています。つまり、変更前のフォルダーの位置には、接合点が用意されていて、アプリケーションが以前のフォルダーやファイルへの書き込みアクセスを試みると、新しいフォルダーへリダイレクトされます。たとえば、「C:\Documents and Settings」は「C:\Users」を示す接合点として設定されています。
接合点は、System 属性が設定され、ACL は「Everyone 読み取り拒否」に設定されています。そのため、既定ではエクスプローラーには表示されません。しかし、コマンド プロンプトで「dir /AL」を実行すると表示することができます。図 4-1 は「dir /AL」の実行結果です。接合点は「JUNCTION」と表示されており、リダイレクト先も表示されています。
図 4-1: dir/AL の実行
dir コマンドで、/A オプションを指定すると、さまざまな属性のファイルを表示することができます。中でも、「L」オプションは、再解析ポイント (接合点) を表示するために使用します。
接合点が作成されているパスと、リダイレクト先は、次の通りです。
接合点の位置 |
リダイレクト先 |
Documents and Settings |
Users |
接合点の位置 |
リダイレクト先 |
Documents and Settings\<username>\My Documents |
Users\<username>\Documents |
Documents and Settings\<username>\My Documents\My Music |
Users\<username>\Music |
Documents and Settings\<username>\My Documents\My Pictures |
Users\<username>\Pictures |
Documents and Settings\<username>\My Documents\My Videos |
Users\<username>\Videos |
接合点の位置 |
リダイレクト先 |
Documents and Settings\<username>\Local Settings |
Users\<username>\AppData\Local |
Documents and Settings\<username>\Local Settings\Application Data |
Users\<username>\AppData\Local |
Documents and Settings\<username>\Local Settings\Temporary Internet Files |
Users\<username>\AppData\Local\Microsoft\Windows\Temporary Internet Files |
Documents and Settings\<username>\Local Settings\History |
Users\<username>\AppData\Local\Microsoft\Windows\History |
Documents and Settings\<username>\Application Data |
Users\<username>\AppData\Roaming |
接合点の位置 |
リダイレクト先 |
Documents and Settings\<username>\Cookies |
Users\<username>\AppData\Roaming\Microsoft\Windows\Cookies |
Documents and Settings\<username>\Recent |
Users\<username>\AppData\Roaming\Microsoft\Windows\Recent |
Documents and Settings\<username>\Nethood |
Users\<username>\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
Documents and Settings\<username>\Printhood |
Users\<username>\AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
Documents and Settings\<username>\SendTo |
Users\<username>\AppData\Roaming\Microsoft\Windows\Send To |
Documents and Settings\<username>\スタート メニュー |
Users\<username>\AppData\Roaming\Microsoft\Windows\StartMenu |
Documents and Settings\<username>\Templates |
Users\<username>\AppData\Roaming\Microsoft\Windows\Templates |
接合点の位置 |
リダイレクト先 |
Users\All Users |
ProgramData |
接合点の位置 |
リダイレクト先 |
Documents and Settings\Default User |
Users\Default |
Documents and Settings\Default User\Desktop |
Users\Default\Desktop |
Documents and Settings\Default User\My Documents |
Users\Default\Documents |
Documents and Settings\Default User\Favorites |
Users\Default\Favorites |
Documents and Settings\Default User\My Documents\My Music |
Users\Default\Music |
Documents and Settings\Default User\My Documents\My Pictures |
Users\Default\Pictures |
Documents and Settings\Default User\My Documents\My Videos |
Users\Default\Videos |
Documents and Settings\Default User\Application Data\ |
Users\Default\AppData\Roaming |
Documents and Settings\Default User\Start Menu\ |
Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu |
Documents and Settings\Default User\Templates\ |
Users\Default\AppData\Roaming\Microsoft\Windows\Templates |
ページのトップへ
環境変数の変更点
フォルダーの構造が変更されたことに伴い、環境変数も追加・変更されています。
新規に追加された環境変数は、Windows Vista 以降の Windows をターゲットにするときにのみ使用します。つまり、Windows Vista や Windows 7 で追加された環境変数は、Windows XP では認識されずエラーが発生してしまいます。
環境変数 |
値 |
%AppData% |
AppData\Roaming |
%LocalAppData% |
AppData\Local |
%ProgramData% |
ProgramData |
%Public% |
Public |
環境変数 |
値 |
%AllUsersProfile% |
ProgramData |
%Temp% または %TMP% |
AppData\Local\Temp |
%UserProfile% |
Users\<username> |
環境変数 |
値 |
%CommonProgramFiles% |
Program Files\Common Files |
%ProgramFiles% |
Program Files |
%WinDir% |
Windows |
ページのトップへ
リソース管理への対応
フォルダーやレジストリにアクセスするときには、適切なフォルダーを選択する必要があります。標準ユーザーには Program Files フォルダーなどへの書き込み権がありません。そのため、これらのフォルダーにアプリケーションから一時的に利用するファイルを追加していると、エラーが起こってしまいます。実行に必要な情報は、できるだけユーザーごと、つまり「Users\<username>」などに保存するようにします。
なお、推奨される保存先の一覧を以下に示します。
すべてのユーザーに共通する設定などを保存するときに使います。ただし、既定ではこれらのフォルダーへの書き込み権は、標準ユーザーにはありません。管理者権限でのアクセスが必要となるため、インストール時などに設定を保存するようにします。
プログラムファイル |
%ProgramFiles% |
システムファイル |
%WinDir% |
共有データ |
%ProgramData% (%AllUsersProfile%) |
レジストリ |
HKLM |
各ユーザーに関する設定を保存するときに使います。これらのフォルダーへの書き込み権は、標準ユーザーにあります。そのため、ユーザーがアプリケーションを実行している時に書き込みが可能です。
ユーザーのファイルの保存先 |
ドキュメント フォルダーなど |
ローミングなしのデータ |
%LocalAppData% |
ローミングありのデータ |
%AppData% |
レジストリ |
HKCU |
リソースへのアクセスは、ハードコードしないようにし、SHGetFolderPath() などの適切な関数を使用するようにします。関数などの詳細は、「3.3 ファイルやフォルダー パスの取得」を参照してください。