安裝內容

Windows Installer 可以將套件安裝在電腦上的兩個安裝內容:每部電腦和每一使用者。 需要每部電腦安裝套件,才能讓電腦的所有使用者存取和使用應用程式。 由於每部電腦安裝會對影響所有使用者的系統進行變更,因此可能會防止具有有限許可權的標準使用者將套件安裝到每部電腦內容中,而不需要先取得許可權。

您可以撰寫每一使用者或每部電腦安裝的套件,並使用 ALLUSERSMSIINSTALLPERUSER 屬性來指定安裝內容。 根據這些屬性,Windows Installer 會自動將資料夾屬性和註冊的值重新導向至每個使用者或每部電腦內容的位置。

注意

MSIINSTALLPERUSER屬性可從 Windows Installer 5.0 和 Windows Server 2008 R2 和 Windows 7 開始取得,有助於開發能夠在每部電腦或每個使用者內容中安裝的單一套件。 如需開發可讓使用者在安裝時間選擇安裝內容之雙重用途套件的資訊,請參閱 單一套件撰寫。 如果ALLUSERS的值不是 2,Windows Installer 會忽略MSIINSTALLPERUSER 屬性。 Windows Installer 在每部電腦內容中安裝時,一律會將 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 資料表中寫入或移除登錄值,並在 [根] 資料行的 [HKEY_LOCAL_MACHINE] 底下,將值 -1 寫入或移除。
Windows Installer 會在 [ 登錄 ] 資料表和 RemoveRegistry 資料表中寫入或移除登錄值,並在 [根] 資料行的 [HKEY_CURRENT_USER] 底下,寫入或移除值 -1。
Windows Installer 會在 [登錄] 資料表RemoveRegistry資料表中寫入或移除登錄值,其值為 msidbRegistryRootClassesRoot (0) 位於 [根] 資料行的[HKLM\軟體\類別]。
Windows Installer 會在 [登錄] 資料表RemoveRegistry資料表中寫入或移除登錄值,並將值 msidbRegistryRootClassesRoot (0) 放在 [根] 資料行的HKCU\軟體\類別下。
COM 註冊會寫入HKLM\軟體\類別
COM 註冊會寫入HKCU\軟體\類別

 

資料夾重新導向

Windows Installer 會將資料夾屬性的值設定為安裝內容之個別資料夾的完整路徑。

注意

資料夾會以其 KNOWNFOLDERIDCSIDL 常數來識別。 從 Windows Vista 開始,應用程式應該使用 SHGetKnownFolderPath 函式和 KNOWNFOLDERID 來判斷特殊資料夾的完整路徑。 使用 SHGetFolderPath 函式和常數特殊專案識別碼的現有應用程式 (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所有使用者之 [啟動] 資料夾的完整路徑。
FOLDERID_CommonStartup (CSIDL_COMMON_STARTUP)
StartUpFolder目前使用者 [啟動] 資料夾的完整路徑。
FOLDERID_Startup (CSIDL_STARTUP)
TemplateFolder所有使用者的 Templates 資料夾完整路徑。
FOLDERID_CommonTemplates (CSIDL_COMMON_TEMPLATES)
TemplateFolder目前使用者 [範本] 資料夾的完整路徑。
FOLDERID_Templates (CSIDL_TEMPLATES)
AdminToolsFolder所有使用者管理員 Tools 資料夾的完整路徑。
FOLDERID_CommonAdminTools (CSIDL_COMMON_ADMINTOOLS)
AdminToolsFolder目前使用者管理員 Tools 資料夾的完整路徑。
FOLDERID_AdminTools (CSIDL_ADMINTOOLS)
AppDataFolder[程式功能表] 資料夾的完整路徑。
Windows Vista 和更新版本: Roaming 資料夾的完整路徑。

FOLDERID_RoamingAppData (CSIDL_APPDATA)
AppDataFolder[程式功能表] 資料夾的完整路徑。
Windows Vista 和更新版本: Roaming 資料夾的完整路徑。

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 和更新版本: 目前使用者之 Documents 資料夾的完整路徑。

FOLDERID_Documents (CSIDL_PERSONAL)
PersonalFolder目前使用者 [我的文件] 資料夾或 [個人] 資料夾的完整路徑。
Windows Vista 和更新版本: 目前使用者之 Documents 資料夾的完整路徑。

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: 屬性值是 (所有使用者的 Program Files (x86) 資料夾的完整路徑,例如%ProgramFiles (x86) %.) 此資料夾的識別碼 FOLDERID_ProgramFilesX86 (CSIDL_PROGRAM_FILESX86.) 檔案可供所有使用者存取。
ProgramFilesFolderWindows Server 2008 R2 和 Windows 7:屬性值是目前使用者 [程式] 資料夾的完整路徑 (,例如 %LocalAppData%\Programs.) 32 位和 64 位系統上FOLDERID_UserProgramFiles此資料夾的識別碼。 FOLDERID_UserProgramFiles沒有對等的 CSIDL 識別碼。 此資料夾中的檔案只能由安裝此資料夾的使用者存取。
Windows Server 2008 和更早版本,以及 Windows Vista 和更早版本: 沒有可用的個別使用者可用的資料夾。 路徑與個別電腦內容 (相同,例如%ProgramFiles% 或 %ProgramFiles (x86) %.) 所有使用者都可以存取此資料夾中的檔案。

CommonFilesFolder32 位版本的 Windows: 屬性值是 (所有使用者通用檔案資料夾的完整路徑,例如%ProgramFiles%\Common Files.) 此資料夾的識別碼是 FOLDERID_ProgramFilesCommon (CSIDL_PROGRAM_FILES_COMMON.) 識別碼 FOLDERID_ProgramFilesCommonFOLDERID_ProgramFilesCommonX86 代表相同的資料夾。 所有使用者都可以存取此資料夾中的檔案。
64 位版本的 Windows: 屬性值是所有使用者通用檔案資料夾的完整路徑 (,例如%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: 屬性值是目前使用者 [程式] 資料夾的完整路徑 (,例如 %LocalAppData%\Programs.) 此資料夾的識別碼是 FOLDERID_UserProgramFilesFOLDERID_UserProgramFiles沒有對等的 CSIDL 識別碼。 此資料夾中的檔案只能由安裝此資料夾的使用者存取。
Windows Server 2008 和更早版本,以及 Windows Vista 和更早版本: 沒有可用的個別使用者可用的資料夾。 路徑與每部電腦內容的路徑相同 (,例如,所有使用者都可以存取此資料夾中的 %ProgramFiles%.) Files。

CommonFiles64Folder屬性值是所有使用者 (通用檔案資料夾的完整路徑,例如%ProgramFiles%\Common Files.) 這是 64 位元件的預先定義資料夾,並適用于 64 位系統。 此資料夾的識別碼FOLDERID_ProgramFilesCommonX64。 沒有與 FOLDERID_ProgramFilesCommonX64相等 CSIDL 識別碼。 所有使用者都可以存取此資料夾中的檔案。
CommonFiles64FolderWindows Server 2008 R2 和 Windows 7: 屬性值是目前 (使用者通用資料夾的完整路徑,例如%LocalAppData%\Programs\Common.) 此資料夾的識別碼 是FOLDERID_UserProgramFilesCommonFOLDERID_UserProgramFilesCommon沒有對等的 CSIDL 識別碼。 此資料夾中的檔案只能由安裝此資料夾的使用者存取。
Windows Server 2008 和更早版本,以及 Windows Vista 和更早版本: 沒有可用的個別使用者可用的資料夾。 路徑與每部電腦內容的路徑相同 (,例如,所有使用者都可以存取此資料夾中的 %ProgramFiles%\Common Files.) 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 函式來擷取這些產品安裝內容的相關資訊。 如需詳細資訊,請參閱 判斷安裝內容