安装上下文

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

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

注意

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

 

快捷方式重定向

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

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

 

注册表重定向

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

每计算机安装上下文 (ALLUSERS=1) 每用户安装上下文 (ALLUSERS="")
Windows Installer 写入或删除在 Registry 表和 RemoveRegistry 表中输入的注册表值,HKEY_LOCAL_MACHINE 下的 Root 列中使用值 -1。
Windows Installer 写入或删除在 Registry 表和 RemoveRegistry 表中输入的注册表值,HKEY_CURRENT_USER 下的 Root 列中使用值 -1。
Windows Installer 写入或删除在 Registry 表和 RemoveRegistry 表中输入的注册表值,HKLM\Software\Classes 下的 Root 列中使用值 msidbRegistryRootClassesRoot (0)。
Windows Installer 写入或删除在 Registry 表和 RemoveRegistry 表中输入的注册表值,HKCU\Software\Classes 下的 Root 列中使用值 msidbRegistryRootClassesRoot (0)。
COM 注册被写入到 HKLM\Software\Classes。
COM 注册被写入到 HKCU\Software\Classes。

 

文件夹重定向

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

注意

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

 

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

每计算机安装上下文 (ALLUSERS=1) 每用户安装上下文 (ALLUSERS="")
DesktopFolder所有用户的 Desktop 文件夹的完整路径。
FOLDERID_PublicDesktop (CSIDL_COMMON_DESKTOPDIRECTORY)
DesktopFolder当前用户的 Desktop 文件夹的完整路径。
FOLDERID_Desktop (CSIDL_DESKTOP, CSIDL_DESKTOPDIRECTORY)
ProgramMenuFolder所有用户的 Program Menu 文件夹的完整路径。
FOLDERID_CommonPrograms (CSIDL_COMMON_PROGRAMS)
ProgramMenuFolder当前用户的 Program Menu 文件夹的完整路径。
FOLDERID_Programs (CSIDL_PROGRAMS)
StartMenuFolder所有用户的 Start Menu 文件夹的完整路径。
FOLDERID_CommonStartMenu (CSIDL_COMMON_STARTMENU)
StartMenuFolder当前用户的 Start Menu 文件夹的完整路径。
FOLDERID_StartMenu (CSIDL_STARTMENU)
StartUpFolder所有用户的 Start Up 文件夹的完整路径。
FOLDERID_CommonStartup (CSIDL_COMMON_STARTUP)
StartUpFolder当前用户的 Start Up 文件夹的完整路径。
FOLDERID_Startup (CSIDL_STARTUP)
TemplateFolder所有用户的 Templates 文件夹的完整路径。
FOLDERID_CommonTemplates (CSIDL_COMMON_TEMPLATES)
TemplateFolder当前用户的 Templates 文件夹的完整路径。
FOLDERID_Templates (CSIDL_TEMPLATES)
AdminToolsFolder所有用户的 Admin Tools 文件夹的完整路径。
FOLDERID_CommonAdminTools (CSIDL_COMMON_ADMINTOOLS)
AdminToolsFolder当前用户的 Admin Tools 文件夹的完整路径。
FOLDERID_AdminTools (CSIDL_ADMINTOOLS)
AppDataFolderProgram Menu 文件夹的完整路径。
Windows Vista 及更高版本:Roaming 文件夹的完整路径。

FOLDERID_RoamingAppData (CSIDL_APPDATA)
AppDataFolderProgram Menu 文件夹的完整路径。
Windows Vista 及更高版本:Roaming 文件夹的完整路径。

FOLDERID_RoamingAppData (CSIDL_APPDATA)
CommonAppDataFolder包含所有用户的应用程序数据的文件夹的完整路径。
FOLDERID_ProgramData (CSIDL_COMMON_APPDATA)
CommonAppDataFolder包含所有用户的应用程序数据的文件夹的完整路径。
FOLDERID_ProgramData (CSIDL_COMMON_APPDATA)
FavoritesFolder当前用户的 Favorites 文件夹的完整路径。
FOLDERID_Favorites (CSIDL_FAVORITES)
FavoritesFolder当前用户的 Favorites 文件夹的完整路径。
FOLDERID_Favorites (CSIDL_FAVORITES)
PersonalFolder当前用户的 My Documents 文件夹或 Personal 文件夹的完整路径。
Windows Vista 及更高版本:当前用户的 Documents 文件夹的完整路径。

FOLDERID_Documents (CSIDL_PERSONAL)
PersonalFolder当前用户的 My Documents 文件夹或 Personal 文件夹的完整路径。
Windows Vista 及更高版本:当前用户的 Documents 文件夹的完整路径。

FOLDERID_Documents (CSIDL_PERSONAL)
SendToFolderSendTo 文件夹的完整路径。
FOLDERID_SendTo (CSIDL_SENDTO)
SendToFolderSendTo 文件夹的完整路径。
FOLDERID_SendTo (CSIDL_SENDTO)
FontsFolderSystem Fonts 文件夹的完整路径。
FOLDERID_Fonts (CSIDL_FONTS)
FontsFolderSystem Fonts 文件夹的完整路径。
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 及更早版本:未提供支持每用户的文件夹。 路径与每计算机上下文中的路径相同(例如 %ProgramFiles%\Common Files 或 %ProgramFiles(x86)%\Common Files)。 所有用户都可以访问此文件夹中的文件。

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包含本地(非漫游)应用程序的文件夹的完整路径。
FOLDERID_LocalAppData (CSIDL_LOCAL_APPDATA)
LocalAppDataFolder包含本地(非漫游)应用程序的文件夹的完整路径。
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)

 

注意

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