インストール コンテキスト
Windows インストーラーは、コンピューターにパッケージをインストールして、コンピューターごととユーザーごとの 2 つのインストール コンテキストにインストールできます。 コンピューターのすべてのユーザーがアプリケーションにアクセスして使用できるようにするには、パッケージのマシンごとのインストールが必要です。 マシンごとのインストールでは、すべてのユーザーに影響を与えるシステムが変更されるため、特権が制限されている標準ユーザーは、最初にアクセス許可を取得しなくても、マシンごとのコンテキストにパッケージをインストールできなくなる可能性があります。
インストール コンテキストを指定するには、ユーザーごとまたはコンピューターごとのインストール用のパッケージを作成し、ALLUSERS と MSIINSTALLPERUSER プロパティを使用します。 これらのプロパティに基づいて、Windows インストーラーは、フォルダーのプロパティと登録の値を、ユーザーごとまたはコンピューターごとのコンテキストの場所に自動的にリダイレクトします。
手記
MSIINSTALLPERUSER プロパティは、Windows インストーラー 5.0 および Windows Server 2008 R2 および Windows 7 以降で使用でき、コンピューターごとまたはユーザーごとのコンテキストでインストールできる 1 つのパッケージの開発を容易にすることができます。 インストール時にインストール コンテキストを選択する機能をユーザーに提供するデュアル用途パッケージの開発については、「単一パッケージ作成」を参照してください。 ALLUSERS の値が 2 でない場合、Windows インストーラーは MSIINSTALLPERUSER プロパティを無視します。 Windows インストーラーは、コンピューターごとのコンテキストでインストールする場合、ALLUSERS の値を常に 1 にリセットし、ALLUSERS の値をユーザーごとのコンテキストでインストールするときに空の文字列 ("") にリセットします。
ショートカット リダイレクト
次の表は、コンピューターごとのインストール コンテキストとユーザーごとのインストール コンテキストのショートカットの場所を比較しています。
Per-Machine インストール コンテキスト (ALLUSERS=1) | Per-User インストール コンテキスト (ALLUSERS="") |
---|---|
アプリケーションは、コンピューターのすべてのユーザーのコントロール パネルの [プログラムの追加と削除] の下に表示されます。 |
アプリケーションは、アプリケーションをインストールしたユーザーのコントロール パネルの [プログラムの追加と削除] にのみ表示されます。 |
ショートカットは、すべてのユーザー プロファイルにインストールされます。 |
ショートカットは、そのユーザーのプロファイルにのみインストールされます。 |
アイコンと変換は、\Installer\{ProductCode} %WINDOWS%に格納されます。 |
アイコンと変換は、%USERPROFILE%\Application Data\Microsoft\Installer\{ProductCode GUID} に格納されます。 |
レジストリ リダイレクト
次の表は、コンピューターごとのインストール コンテキストとユーザーごとのインストール コンテキストのレジストリ エントリの場所を比較します。
Per-Machine インストール コンテキスト (ALLUSERS=1) | Per-User インストール コンテキスト (ALLUSERS="") |
---|---|
Windows インストーラーは、Registry テーブルに入力されたレジストリ値を書き込むか削除し、RemoveRegistry テーブルを し、値を HKEY_LOCAL_MACHINE の [ルート] 列に -1 します。 |
Windows インストーラーは、Registry テーブルに入力されたレジストリ値を書き込むか削除し、RemoveRegistry テーブルを し、値を HKEY_CURRENT_USER の [ルート] 列に -1 します。 |
Windows インストーラーは、Registry テーブルに入力されたレジストリ値を書き込むか、削除します。RemoveRegistry テーブル、値 msidbRegistryRootClassesRoot (0) はルート列 HKLM\Software\Classesの下にあります。 |
Windows インストーラーは、hkCU \Software\クラスのの下にあるルート列の msidbRegistryRootClassesRoot (0) の値を使用して、レジストリ テーブルと RemoveRegistry テーブルに入力されたレジストリ値書き込みまたは削除します。 |
COM 登録は、HKLM \ソフトウェア\クラスに書き込まれます。 |
COM 登録は、HKCU \ソフトウェア\クラスに書き込まれます。 |
フォルダー リダイレクト
Windows インストーラーは、フォルダー プロパティの値を、インストール コンテキストのそれぞれのフォルダーの完全なパスに設定します。
手記
フォルダーは、KNOWNFOLDERID および CSIDL 定数によって識別されます。 Windows Vista 以降では、アプリケーションでは、SHGetKnownFolderPath 関数と KNOWNFOLDERID を使用して、特別なフォルダーへの完全なパスを決定する必要があります。 SHGetFolderPath 関数と定数特殊項目 ID (CSIDL) を使用する既存のアプリケーションは引き続き機能します。
次の表は、Windows インストーラーがマシンごとまたはユーザーごとのインストール コンテキストでパッケージをインストールするときに使用されるフォルダーの場所を比較したものです。
Per-Machine インストール コンテキスト (ALLUSERS=1) | Per-User インストール コンテキスト (ALLUSERS="") |
---|---|
DesktopFolderすべてのユーザーのデスクトップ フォルダーの完全なパス。 FOLDERID_PublicDesktop (CSIDL_COMMON_DESKTOPDIRECTORY) |
DesktopFolder現在のユーザーのデスクトップ フォルダーの完全なパス。 FOLDERID_Desktop (CSIDL_DESKTOP, CSIDL_DESKTOPDIRECTORY) |
ProgramMenuFolderすべてのユーザーの Program Menu フォルダーの完全なパス。 FOLDERID_CommonPrograms (CSIDL_COMMON_PROGRAMS) |
ProgramMenuFolder現在のユーザーの Program Menu フォルダーの完全なパス。 FOLDERID_Programs (CSIDL_PROGRAMS) |
StartMenuFolderすべてのユーザーのスタート メニュー フォルダーの完全なパス。 FOLDERID_CommonStartMenu (CSIDL_COMMON_STARTMENU) |
StartMenuFolder現在のユーザーのスタート メニュー フォルダーの完全なパス。 FOLDERID_StartMenu (CSIDL_STARTMENU) |
StartUpFolderすべてのユーザーの [スタートアップ] フォルダーの完全なパス。 FOLDERID_CommonStartup (CSIDL_COMMON_STARTUP) |
StartUpFolder現在のユーザーの [スタートアップ] フォルダーの完全なパス。 FOLDERID_Startup (CSIDL_STARTUP) |
TemplateFolderすべてのユーザーの Templates フォルダーの完全なパスです。 FOLDERID_CommonTemplates (CSIDL_COMMON_TEMPLATES) |
TemplateFolder現在のユーザーの Templates フォルダーの完全なパスです。 FOLDERID_Templates (CSIDL_TEMPLATES) |
AdminToolsFolderすべてのユーザーの管理ツール フォルダーの完全なパス。 FOLDERID_CommonAdminTools (CSIDL_COMMON_ADMINTOOLS) |
AdminToolsFolder現在のユーザーの管理ツール フォルダーの完全なパス。 FOLDERID_AdminTools (CSIDL_ADMINTOOLS) |
AppDataFolderProgram Menu フォルダーの完全なパスです。 Windows Vista 以降 : 移動フォルダーの完全なパス。 FOLDERID_RoamingAppData (CSIDL_APPDATA) |
AppDataFolderProgram Menu フォルダーの完全なパスです。 Windows Vista 以降 : 移動フォルダーの完全なパス。 FOLDERID_RoamingAppData (CSIDL_APPDATA) |
CommonAppDataFolderすべてのユーザーのアプリケーション データを含むフォルダーの完全なパス。 FOLDERID_ProgramData (CSIDL_COMMON_APPDATA) |
CommonAppDataFolderすべてのユーザーのアプリケーション データを含むフォルダーの完全なパス。 FOLDERID_ProgramData (CSIDL_COMMON_APPDATA) |
FavoritesFolder現在のユーザーの [お気に入り] フォルダーの完全なパス。 FOLDERID_Favorites (CSIDL_FAVORITES) |
FavoritesFolder現在のユーザーの [お気に入り] フォルダーの完全なパス。 FOLDERID_Favorites (CSIDL_FAVORITES) |
PersonalFolder現在のユーザーの個人用ドキュメント フォルダーまたは個人用フォルダーの完全なパス。 Windows Vista 以降: 現在のユーザーの [ドキュメント] フォルダーの完全なパス。 FOLDERID_Documents (CSIDL_PERSONAL) |
PersonalFolder現在のユーザーの個人用ドキュメント フォルダーまたは個人用フォルダーの完全なパス。 Windows Vista 以降: 現在のユーザーの [ドキュメント] フォルダーの完全なパス。 FOLDERID_Documents (CSIDL_PERSONAL) |
SendToFolderSendTo フォルダーの完全なパス。 FOLDERID_SendTo (CSIDL_SENDTO) |
SendToFolderSendTo フォルダーの完全なパス。 FOLDERID_SendTo (CSIDL_SENDTO) |
FontsFolderシステム フォント フォルダーの完全なパス。 FOLDERID_Fonts (CSIDL_FONTS) |
FontsFolderシステム フォント フォルダーの完全なパス。 FOLDERID_Fonts (CSIDL_FONTS) |
ProgramFilesFolder32 ビット バージョンの Windows: プロパティの値は、すべてのユーザーの Program Files フォルダーへの完全なパスです (たとえば、%ProgramFiles%.このフォルダーの識別子は FOLDERID_ProgramFiles (CSIDL_PROGRAM_FILES.識別子 FOLDERID_ProgramFiles と FOLDERID_ProgramFilesX86 は同じフォルダーを表します。 このフォルダー内のファイルには、すべてのユーザーがアクセスできます。 64 ビット バージョンの Windows: プロパティ値は、すべてのユーザーの Program Files (x86) フォルダーへの完全なパスです (たとえば、%ProgramFiles(x86)%)。 このフォルダーの識別子は FOLDERID_ProgramFilesX86 (CSIDL_PROGRAM_FILESX86.このフォルダー内のファイルには、すべてのユーザーがアクセスできます。 |
ProgramFilesFolderWindows Server 2008 R2 および Windows 7: プロパティの値は、現在のユーザーの Programs フォルダーの完全なパスです (たとえば、%LocalAppData%\Programs)。このフォルダーの識別子は、32 ビットおよび 64 ビット システムで FOLDERID_UserProgramFiles されます。
FOLDERID_UserProgramFilesに相当する CSIDL 識別子はありません。 このフォルダー内のファイルには、このフォルダーをインストールしたユーザーのみがアクセスできます。 Windows Server 2008 以前、および Windows Vista 以前: ユーザーごとの対応フォルダーは使用できません。 パスは、マシンごとのコンテキスト (たとえば、%ProgramFiles% または %ProgramFiles(x86)%) の場合と同じです。 このフォルダー内のファイルには、すべてのユーザーがアクセスできます。 |
CommonFilesFolder32 ビット バージョンの Windows: プロパティの値は、すべてのユーザーの Common Files フォルダーへの完全なパスです (たとえば、%ProgramFiles%\Common Files)。このフォルダーの識別子は FOLDERID_ProgramFilesCommon (CSIDL_PROGRAM_FILES_COMMON.識別子 FOLDERID_ProgramFilesCommon と FOLDERID_ProgramFilesCommonX86 は同じフォルダーを表します。 このフォルダー内のファイルには、すべてのユーザーがアクセスできます。 64 ビット バージョンの Windows: プロパティ値は、すべてのユーザーの Common Files フォルダーへの完全なパスです (たとえば、%ProgramFiles(x86)%\Common Files)。 このフォルダーの識別子は FOLDERID_ProgramFilesCommonX86 (CSIDL_PROGRAM_FILES_COMMONX86.このフォルダー内のファイルには、すべてのユーザーがアクセスできます。 |
CommonFilesFolderWindows Server 2008 R2 および Windows 7: プロパティの値は、現在のユーザーの Common フォルダーの完全なパスです (たとえば、%LocalAppData%\Programs\Common)。このフォルダーの識別子は、32 ビットおよび 64 ビット システムで FOLDERID_UserProgramFilesCommon されます。
FOLDERID_UserProgramFilesCommonに相当する CSIDL 識別子はありません。 このフォルダー内のファイルには、このフォルダーをインストールしたユーザーのみがアクセスできます。 Windows Server 2008 以前、および Windows Vista 以前: ユーザーごとの対応フォルダーは使用できません。 パスは、コンピューターごとのコンテキストと同じです (たとえば、\Common Files または %ProgramFiles(x86)%\Common Files など %ProgramFiles%)。 このフォルダー内のファイルには、すべてのユーザーがアクセスできます。 |
ProgramFiles64Folderプロパティの値は、すべてのユーザーの Program Files フォルダーへの完全なパスです (例: %ProgramFiles%.このフォルダーの識別子は FOLDERID_ProgramFilesX64です。
FOLDERID_ProgramFilesX64と同等の CSIDL 識別子はありません。 これは、64 ビット コンポーネント用の定義済みフォルダーであり、64 ビット システムに適用されます。 このフォルダー内のファイルには、すべてのユーザーがアクセスできます。 |
ProgramFiles64FolderWindows Server 2008 R2 および Windows 7: プロパティの値は、現在のユーザーの Programs フォルダーの完全なパスです (たとえば、%LocalAppData%\Programs)。このフォルダーの識別子は FOLDERID_UserProgramFilesです。
FOLDERID_UserProgramFilesに相当する CSIDL 識別子はありません。 このフォルダー内のファイルには、このフォルダーをインストールしたユーザーのみがアクセスできます。 Windows Server 2008 以前、および Windows Vista 以前: ユーザーごとの対応フォルダーは使用できません。 パスは、マシンごとのコンテキストの場合と同じです (たとえば、%ProgramFiles%)。このフォルダー内のファイルには、すべてのユーザーがアクセスできます。 |
CommonFiles64Folderプロパティ値は、すべてのユーザーの Common Files フォルダーへの完全なパスです (たとえば、%ProgramFiles%\Common Files)。これは、64 ビット コンポーネント用の定義済みフォルダーであり、64 ビット システムに適用されます。 このフォルダーの識別子は FOLDERID_ProgramFilesCommonX64です。
FOLDERID_ProgramFilesCommonX64と同等の CSIDL 識別子はありません。 このフォルダー内のファイルには、すべてのユーザーがアクセスできます。 |
CommonFiles64FolderWindows Server 2008 R2 および Windows 7: プロパティの値は、現在のユーザーの Common フォルダーの完全なパスです (たとえば、%LocalAppData%\Programs\Common)。このフォルダーの識別子は FOLDERID_UserProgramFilesCommonです。
FOLDERID_UserProgramFilesCommonに相当する CSIDL 識別子はありません。 このフォルダー内のファイルには、このフォルダーをインストールしたユーザーのみがアクセスできます。 Windows Server 2008 以前、および Windows Vista 以前: ユーザーごとの対応フォルダーは使用できません。 パスは、コンピューターごとのコンテキストと同じです (たとえば、%ProgramFiles%\Common Files)。このフォルダー内のファイルには、すべてのユーザーがアクセスできます。 |
WindowsFolderWindows フォルダーの完全なパス。 FOLDERID_Windows (CSIDL_WINDOWS) |
WindowsFolderWindows フォルダーの完全なパス。 FOLDERID_Windows (CSIDL_WINDOWS) |
SystemFolderSystem フォルダーの完全なパス。 FOLDERID_SystemX86 (CSIDL_SYSTEMX86) |
SystemFolderSystem フォルダーの完全なパス。 FOLDERID_SystemX86 (CSIDL_SYSTEMX86) |
LocalAppDataFolderローカル (非roaming) アプリケーションを含むフォルダーの完全なパス。 FOLDERID_LocalAppData (CSIDL_LOCAL_APPDATA) |
LocalAppDataFolderローカル (非roaming) アプリケーションを含むフォルダーの完全なパス。 FOLDERID_LocalAppData (CSIDL_LOCAL_APPDATA) |
MyPicturesFolderPictures フォルダーまたは My Pictures フォルダーの完全なパスです。 FOLDERID_Pictures (CSIDL_MYPICTURES) |
MyPicturesFolderPictures フォルダーまたは My Pictures フォルダーの完全なパスです。 FOLDERID_Pictures (CSIDL_MYPICTURES) |
PrintHoodFolderPrintHood フォルダーの完全なパス。 FOLDERID_PrintHood (CSIDL_PRINTHOOD) |
PrintHoodFolderPrintHood フォルダーの完全なパス。 FOLDERID_PrintHood (CSIDL_PRINTHOOD) |
NetHoodFolderNetHood フォルダーの完全なパスです。 FOLDERID_NetHood (CSIDL_NETHOOD) |
NetHoodFolderNetHood フォルダーの完全なパスです。 FOLDERID_NetHood (CSIDL_NETHOOD) |
RecentFolderRecent フォルダーの完全なパスです。 FOLDERID_Recent (CSIDL_RECENT) |
RecentFolderRecent フォルダーの完全なパスです。 FOLDERID_Recent (CSIDL_RECENT) |
手記
アプリケーションは、MsiEnumProducts を呼び出すか、MsiEnumProductsEx関数をして、システムにインストールされているすべての製品を列挙できます。 その後、アプリケーションは、MsiGetProductInfoEx を呼び出すか、MsiGetProductInfo関数をすることによって、これらの製品のインストール コンテキストに関する情報を取得できます。 詳細については、「インストール コンテキスト の決定を参照してください。