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 の実行

図 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>」などに保存するようにします。

なお、推奨される保存先の一覧を以下に示します。

「標準ユーザー」に関しては、「4.3 ユーザー アカウント制御 (UAC: User Account Control)」を参照してください。

すべてのユーザーに共通する設定などを保存するときに使います。ただし、既定ではこれらのフォルダーへの書き込み権は、標準ユーザーにはありません。管理者権限でのアクセスが必要となるため、インストール時などに設定を保存するようにします。

プログラムファイル %ProgramFiles%
システムファイル %WinDir%
共有データ %ProgramData%
(%AllUsersProfile%)
レジストリ HKLM

各ユーザーに関する設定を保存するときに使います。これらのフォルダーへの書き込み権は、標準ユーザーにあります。そのため、ユーザーがアプリケーションを実行している時に書き込みが可能です。

ユーザーのファイルの保存先 ドキュメント フォルダーなど
ローミングなしのデータ %LocalAppData%
ローミングありのデータ %AppData%
レジストリ HKCU

リソースへのアクセスは、ハードコードしないようにし、SHGetFolderPath() などの適切な関数を使用するようにします。関数などの詳細は、「3.3 ファイルやフォルダー パスの取得」を参照してください。

ページのトップへ