安装上下文

Windows Installer 可以将计算机上的包安装到两个安装上下文中:每台计算机和每用户。 需要每台计算机安装包才能使计算机的所有用户能够访问和使用该应用程序。 由于每台计算机安装对影响所有用户的系统进行了更改,因此在未首先获得权限的情况下,可能会阻止具有有限权限的标准用户将包安装到每台计算机上下文中。

可以通过创作每个用户或每台计算机安装的包并使用 ALLUSERSMSIINSTALLPERUSER 属性来指定安装上下文。 根据这些属性,Windows Installer 会自动将文件夹属性的值和注册重定向到每用户或每台计算机上下文的位置。

注意

MSIINSTALLPERUSER 属性(从 Windows Installer 5.0 和 Windows Server 2008 R2 和 Windows 7 开始)开始提供,有助于开发能够在每台计算机或每用户上下文中安装的单个包。 有关开发双用途包的信息,该包为用户提供在安装时选择安装上下文的功能,请参阅 单个包创作。 Windows安装程序忽略 MSIINSTALLPERUSER 属性(如果 ALLUSERS 的值不是 2)。 Windows Installer 在每台计算机上下文中安装 ALLUSERS 时始终将 ALLUSERS 的值重置为 1,并将 ALLUSERS 的值重置为空字符串, (“”) 安装在每个用户上下文中时。

 

快捷方式重定向

下表比较了每台计算机和每用户安装上下文的快捷方式位置。

Per-Machine安装上下文 (ALLUSERS=1) Per-User安装上下文 (ALLUSERS=“”)
应用程序显示在计算机的所有用户控制面板上的“添加/删除程序”下。
应用程序仅在已安装应用程序的用户的控制面板“添加/删除程序”下显示。
快捷方式安装到“所有用户”配置文件。
快捷方式仅安装到该用户的配置文件。
图标和转换存储在 %WINDOWS%\Installer\{ProductCode}中。
图标和转换存储在 %USERPROFILE%\Application Data\Microsoft\Installer\{ProductCode GUID} 中

 

注册表重定向

下表比较了每台计算机和每用户安装上下文的注册表项的位置。

Per-Machine安装上下文 (ALLUSERS=1) Per-User安装上下文 (ALLUSERS=“”)
Windows Installer 将写入或删除注册表表中输入的注册表值和 RemoveRegistry 表,其值 -1 位于根列中,HKEY_LOCAL_MACHINE下。
Windows Installer 将写入或删除注册表表中输入的注册表值和 RemoveRegistry 表,其值 -1 位于根列中,在 HKEY_CURRENT_USER 下。
Windows Installer 在注册表表中写入或删除输入的注册表值和 RemoveRegistry 表,其值 msidbRegistryRootClassesRoot (0) ,位于 HKLMSoftwareClasses\\ 下。
Windows Installer 在注册表表中写入或删除输入的注册表值和 RemoveRegistry 表,其值 msidbRegistryRootClassesRoot (0) 位于 ROOT 列中,位于 HKCUSoftwareClasses\\ 下。
COM 注册将写入 HKLMSoftwareClasses\\。
COM 注册将写入 HKCUSoftwareClasses\\。

 

文件夹重定向

Windows Installer 将文件夹属性的值设置为安装上下文的相应文件夹的完整路径。

注意

文件夹由 其 KNOWNFOLDERIDCSIDL 常量标识。 从 Windows Vista 开始,应用程序应使用 SHGetKnownFolderPath 函数和 KNOWNFOLDERID 来确定特殊文件夹的完整路径。 使用 SHGetFolderPath 函数和常量特殊项 ID 的现有应用程序 (CSIDL) 将继续工作。

 

下表比较了Windows Installer 在每台计算机或每用户安装上下文中安装包时使用的文件夹位置。

Per-Machine安装上下文 (ALLUSERS=1) Per-User安装上下文 (ALLUSERS=“”)
DesktopFolder所有用户的 Desktop 文件夹的完整路径。
FOLDERID_PublicDesktop (CSIDL_COMMON_DESKTOPDIRECTORY)
DesktopFolder当前用户的 Desktop 文件夹的完整路径。
FOLDERID_Desktop (CSIDL_DESKTOPCSIDL_DESKTOPDIRECTORY)
ProgramMenuFolder所有用户的程序菜单文件夹的完整路径。
FOLDERID_CommonPrograms (CSIDL_COMMON_PROGRAMS)
ProgramMenuFolder当前用户的程序菜单文件夹的完整路径。
FOLDERID_Programs (CSIDL_PROGRAMS)
StartMenuFolder所有用户"开始"菜单菜单文件夹的完整路径。
FOLDERID_CommonStartMenu (CSIDL_COMMON_STARTMENU)
StartMenuFolder当前用户的"开始"菜单菜单文件夹的完整路径。
FOLDERID_StartMenu (CSIDL_STARTMENU)
StartUpFolder所有用户"开始"菜单 Up 文件夹的完整路径。
FOLDERID_CommonStartup (CSIDL_COMMON_STARTUP)
StartUpFolder当前用户的 "开始"菜单 Up 文件夹的完整路径。
FOLDERID_Startup (CSIDL_STARTUP)
TemplateFolder所有用户的 Templates 文件夹的完整路径。
FOLDERID_CommonTemplates (CSIDL_COMMON_TEMPLATES)
TemplateFolder当前用户模板文件夹的完整路径。
FOLDERID_Templates (CSIDL_TEMPLATES)
AdminToolsFolder所有用户的“管理工具”文件夹的完整路径。
FOLDERID_CommonAdminTools (CSIDL_COMMON_ADMINTOOLS)
AdminToolsFolder当前用户管理工具文件夹的完整路径。
FOLDERID_AdminTools (CSIDL_ADMINTOOLS)
AppDataFolder程序菜单文件夹的完整路径。
Windows Vista 及更高版本:漫游文件夹的完整路径。

FOLDERID_RoamingAppData (CSIDL_APPDATA)
AppDataFolder程序菜单文件夹的完整路径。
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_ProgramFilesFOLDERID_ProgramFilesX86表示同一文件夹。 所有用户都可以访问此文件夹中的文件。
64 位版本的 Windows:属性值是 (所有用户 (x86) 文件夹的完整路径,例如%ProgramFiles (x86) %.) 此文件夹的标识符 FOLDERID_ProgramFilesX86 (CSIDL_PROGRAM_FILESX86.) 文件夹中的文件可供所有用户访问。
ProgramFilesFolderWindows Server 2008 R2 和 Windows 7:属性值是当前用户 (Program 文件夹的完整路径,例如,%LocalAppData%\Programs.) 此文件夹的标识符在 32 位和 64 位系统上FOLDERID_UserProgramFilesFOLDERID_UserProgramFiles没有等效的 CSIDL 标识符。 只能由安装此文件夹的用户访问此文件夹中的文件。
Windows Server 2008 及更早版本,Windows Vista 及更早版本:没有支持每个用户的文件夹可用。 路径与每台计算机上下文 (相同,例如 %ProgramFiles% 或 %ProgramFiles (x86) %.) 所有用户都可以访问此文件夹中的文件。

CommonFilesFolder32位版本的 Windows:属性值是 (所有用户的 Common Files 文件夹的完整路径,例如,%ProgramFiles%\Common Files.) 此文件夹的标识符FOLDERID_ProgramFilesCommon (CSIDL_PROGRAM_FILES_COMMON.) 标识符FOLDERID_ProgramFilesCommonFOLDERID_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_UserProgramFilesCommonFOLDERID_UserProgramFilesCommon没有等效的 CSIDL 标识符。 只能由安装此文件夹的用户访问此文件夹中的文件。
Windows Server 2008 及更早版本,Windows Vista 及更早版本:没有支持每个用户的文件夹可用。 路径与每台计算机上下文 (中的路径相同,例如 %ProgramFiles%\Common Files 或 %ProgramFiles (x86) %\Common Files.) 所有用户都可以访问此文件夹中的文件。

ProgramFiles64Folder属性值是所有用户的 Program Files 文件夹的完整路径 (,例如,%ProgramFiles%.) 此文件夹的标识符 FOLDERID_ProgramFilesX64。 没有等效的 CSIDL 标识符 来FOLDERID_ProgramFilesX64。 这是 64 位组件的预定义文件夹,适用于 64 位系统。 所有用户都可以访问此文件夹中的文件。
ProgramFiles64FolderWindows Server 2008 R2 和 Windows 7:属性值是当前用户 (Program 文件夹的完整路径,例如%LocalAppData%\Programs.) 此文件夹的标识符FOLDERID_UserProgramFilesFOLDERID_UserProgramFiles没有等效的 CSIDL 标识符。 只能由安装此文件夹的用户访问此文件夹中的文件。
Windows Server 2008 及更早版本,Windows Vista 及更早版本:没有支持每个用户的文件夹可用。 路径与每台计算机上下文 (相同,例如,所有用户都可以访问此文件夹中的 %ProgramFiles%.) 文件。

CommonFiles64Folder属性值是所有用户的 Common Files 文件夹的完整路径 (,例如 ,%ProgramFiles%\Common Files.) 这是 64 位组件的预定义文件夹,适用于 64 位系统。 此文件夹的标识符 FOLDERID_ProgramFilesCommonX64。 没有等效的 CSIDL 标识符 来FOLDERID_ProgramFilesCommonX64。 所有用户都可以访问此文件夹中的文件。
CommonFiles64FolderWindows Server 2008 R2 和 Windows 7:属性值是当前用户的 Common 文件夹的完整路径 (,例如,%LocalAppData%\Programs\Common.) 此文件夹的标识符FOLDERID_UserProgramFilesCommonFOLDERID_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包含本地 (非漫游) 应用程序的文件夹的完整路径。
FOLDERID_LocalAppData (CSIDL_LOCAL_APPDATA)
LocalAppDataFolder包含本地 (非漫游) 应用程序的文件夹的完整路径。
FOLDERID_LocalAppData (CSIDL_LOCAL_APPDATA)
MyPicturesFolder“图片”或“我的图片”文件夹的完整路径。
FOLDERID_Pictures (CSIDL_MYPICTURES)
MyPicturesFolder“图片”或“我的图片”文件夹的完整路径。
FOLDERID_Pictures (CSIDL_MYPICTURES)
PrintHoodFolderPrintHood 文件夹的完整路径。
FOLDERID_PrintHood (CSIDL_PRINTHOOD)
PrintHoodFolderPrintHood 文件夹的完整路径。
FOLDERID_PrintHood (CSIDL_PRINTHOOD)
NetHoodFolderNetHood 文件夹的完整路径。
FOLDERID_NetHood (CSIDL_NETHOOD)
NetHoodFolderNetHood 文件夹的完整路径。
FOLDERID_NetHood (CSIDL_NETHOOD)
RecentFolder最近文件夹的完整路径。
FOLDERID_Recent (CSIDL_RECENT)
RecentFolder最近文件夹的完整路径。
FOLDERID_Recent (CSIDL_RECENT)

 

注意

应用程序可以调用 MsiEnumProductsMsiEnumProductsEx 函数来枚举系统上安装的所有产品。 然后,应用程序可以通过调用 MsiGetProductInfoExMsiGetProductInfo 函数来检索这些产品的安装上下文的相关信息。 有关 确定安装上下文的信息。