管理员与普通CMD下Msiexec被动安装MSI差异及SCCM部署疑问
问题分析与解答
一、管理员/普通CMD执行差异的核心原因
这是MSI的每用户(Per-User)与每机器(Per-Machine)安装上下文导致的:
- 普通CMD执行时,虽弹出凭证提示,但安装上下文为当前标准用户:HKCU注册表、
%LOCALAPPDATA%文件夹、桌面快捷方式均属于用户专属位置,会正常写入当前登录用户的配置空间。 - 管理员CMD执行时,安装上下文切换为系统账户(SYSTEM):此时HKCU指向SYSTEM用户的注册表 hive,
%LOCALAPPDATA%对应SYSTEM的专属目录,桌面快捷方式会创建在SYSTEM的隐藏桌面(你无法直接看到),而非当前登录用户的位置。而INSTALLDIR通常是每机器路径(如Program Files),因此文件复制不受影响。
二、WXS配置的排查方向
检查你的WXS文件中以下关键节点:
- 组件安装范围:包含HKCU注册表、
%LOCALAPPDATA%文件夹、快捷方式的组件,需确保未设置Component/@PerMachine="yes",或明确标记为PerMachine="no"。PerMachine="yes"会强制组件按每机器安装,管理员上下文下不会写入当前用户的专属位置。 - 注册表路径:确认HKCU的路径未误写为
HKLM(每机器注册表),路径拼写无误。 - 文件夹定位:
%LOCALAPPDATA%对应的WXS内置属性是LocalAppDataFolder,需使用该属性而非硬编码路径,示例:<Directory Id="LocalAppDataFolder" Name="LocalAppData"> <Directory Id="MyAppDataDir" Name="MyApp" /> </Directory> - 快捷方式父目录:桌面快捷方式应指向
DesktopFolder(每用户桌面),而非CommonDesktopFolder(公共桌面,每机器)。
三、SCCM部署的执行环境
SCCM部署MSI的执行环境分两种场景:
- 设备部署(Device-based):以SYSTEM账户执行,和管理员CMD的上下文一致,会出现相同问题——用户专属配置不会写入当前登录用户的位置。
- 用户部署(User-based):以当前登录的用户账户执行,和普通CMD的上下文一致,能正常创建HKCU注册表、
%LOCALAPPDATA%文件夹及桌面快捷方式。
若目标是给标准用户部署,建议选择用户部署,同时确保WXS中组件配置为Per-User,且MSI支持每用户/每机器的自适应安装(不强制PerMachine="yes")。
内容的提问来源于stack exchange,提问作者talihsu
相关产品推荐
相关产品推荐

