能否静态设置ALLUSERS属性以强制按用户安装?
如何静态设置ALLUSERS属性强制按用户安装?
针对你遇到的ALLUSERS属性配置问题,确实可以通过以下几种方式实现静态配置,强制MSI进行按用户安装:
方法1:通过自定义动作在初始化阶段设置空值
由于直接在Property表中无法存储空字符串,可通过自定义动作在安装启动时动态设置ALLUSERS为空:
- 创建类型1自定义动作(VBScript/JScript),代码逻辑为:
Session.Property("ALLUSERS") = "" - 将该自定义动作添加到
InstallUISequence和InstallExecuteSequence的CostInitialize步骤之前执行,确保在安装上下文判断前完成属性设置,避免触发UAC提升提示。
方法2:临时占位符+自定义动作替换
如果需要在Property表中保留ALLUSERS记录,可先设置临时值再替换:
- 在Property表中添加ALLUSERS属性,赋值为临时标记(比如
USER_INSTALL) - 同样在安装初始化阶段(CostInitialize之前)执行自定义动作,将ALLUSERS的值替换为空字符串。
方法3:使用WiX工具集构建安装包(适用于自行开发的MSI)
若你是用WiX制作安装包,直接在代码中声明空值属性即可,WiX会自动处理底层数据库的存储兼容问题:
<Property Id="ALLUSERS" Value="" />
关键注意事项
- 确保安装包内没有其他强制机器上下文的配置:比如组件标记为
per-machine、或其他自定义逻辑硬设置ALLUSERS为1 - 测试时需在非管理员账户下验证,确认不会弹出UAC提示,且安装内容(文件、注册表)被写入用户专属路径(如
%APPDATA%、HKEY_CURRENT_USER)
内容的提问来源于stack exchange,提问作者Seva Alekseyev
相关产品推荐
相关产品推荐

