debug - 安装.msi时,为所有用户安装程序

文章目录

    • debug - 安装.msi时,为所有用户安装程序
    • 概述
    • 笔记
      • 试试在目标.msi后面直接加参数的测试
    • 备注
    • 备注
    • END

debug - 安装.msi时,为所有用户安装程序

概述

为了测试,装了一个test.msi.
安装时,只有安装路径的选择,没有是否为所有用户安装的选项。
本地有2个用户,一个是正式的win10微软账号usr_a,一个是本地开发账号usr_b。
usr_a的权限最高,是本机的第一个管理员账号。usr_b的权限稍微低一些,也是管理员。

如果直接安装test.msi, usr_a可以正常用安装好的test程序。
但是切到usr_b后,无法使用usr_a安装好的test程序。

尝试查看test.msi的命令行帮助,看到有选项可以为所有用户安装。
不过必须在cmd下安装(或者写在.bat中),才能输入命令行参数。

安装.msi时,加了"为所有用户"安装的选项。安装完成后,切到usr_b, 确实可以用test程序了。

笔记

go1.24.1.windows-amd64.msi --help

在这里插入图片描述

Windows ® Installer. V 5.0.19041.4651msiexec /Option <Required Parameter> [Optional Parameter]安装选项</package | /i> <Product.msi>安装或配置产品/a <Product.msi>管理安装 - 在网络上安装产品/j<u|m> <Product.msi> [/t <Transform List>] [/g <Language ID>]公布产品 - m 公布到所有用户,u 公布到当前用户</uninstall | /x> <Product.msi | ProductCode>卸载产品
显示选项/quiet安静模式,无用户交互/passive无人参与模式 - 只显示进度栏/q[n|b|r|f]设置用户界面级别n - 无用户界面b - 基本界面r - 精简界面f - 完整界面(默认值)/help帮助信息
重新启动选项/norestart安装完成后不重新启动/promptrestart必要时提示用户重新启动/forcerestart安装后始终重新启动计算机
日志选项/l[i|w|e|a|r|u|c|m|o|p|v|x|+|!|*] <LogFile>i - 状态消息w - 非致命警告e - 所有错误消息a - 操作的启动r - 操作特定记录u - 用户请求c - 初始用户界面参数m - 内存不足或致命退出信息o - 磁盘空间不足消息p - 终端属性v - 详细输出x - 额外调试信息+ - 扩展到现有日志文件! - 每一行刷新到日志* - 记录所有信息,除了 v 和 x 选项/log <LogFile>与 /l* <LogFile> 相同
更新选项/update <Update1.msp>[;Update2.msp]应用更新/uninstall <PatchCodeGuid>[;Update2.msp] /package <Product.msi | ProductCode>删除产品的更新
修复选项/f[p|e|c|m|s|o|d|a|u|v] <Product.msi | ProductCode>修复产品p - 仅当文件丢失时o - 如果文件丢失或安装了更旧的版本(默认值)e - 如果文件丢失或安装了相同或更旧的版本d - 如果文件丢失或安装了不同版本c - 如果文件丢失或较验和与计算的值不匹配a - 强制重新安装所有文件u - 所有必要的用户特定注册表项(默认值)m - 所有必要的计算机特定注册表项(默认值)s - 所有现有的快捷键方式(默认值)v - 从源运行并重新缓存本地安装包
设置公共属性[PROPERTY=PropertyValue]请查阅 Windows (R) Installer SDK 获得有关
命令行语法的其他文档。版权所有 (C) Microsoft Corporation. 保留所有权利。
此软件的部分内容系基于 Independent JPEG Group 的工作。

看不大清楚,好像是msiexec + /jm参数为为所有用户安装。
不过我开始理解错了,没有用msiexec带命令行安装go1.24.1.windows-amd64.msi ,输入成了go1.24.1.windows-amd64.msi /m
不过安装完,所有用户中都可以正常使用安装完的go命令行。

因为我用的/m参数并不是msiexec的标准参数,但是又有效果,我就想看一下,给msiexec加/m参数会咋样?

msiexec /i "go1.24.1.windows-amd64.msi"  /m /log "my_log_2025_0321_1650.txt"

不报错。不知道msiexec是否将/m参数丢弃了。
看日志

Property(S): dirD847BCAADF455EBFA9F73B7D803AC0EF = C:\Program Files\Go\test\wasmmemsize.dir\
Property(S): WixUIRMOption = UseRM
Property(S): WIXUI_INSTALLDIR = INSTALLDIR
Property(S): ALLUSERS = 1 // !!!
Property(S): ARPNOMODIFY = 1
Property(S): ARPINSTALLLOCATION = C:\Program Files\Go\
Property(S): ProgramFiles64Folder = C:\Program Files\
Property(S): TARGETDIR = E:\
Property(S): ProgramMenuFolder = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\
Property(S): EnvironmentEntries = E:\
Property(S): SourceDir = D:\tools\go\

可以看到 ALLUSERS 的值为1,说明 /m可能是将ALLUSERS置为1了。

查看msiexec用的是哪一个?

D:\tools\go>where msiexec
C:\Windows\System32\msiexec.exe

我现在用的是第2个用户(me),用IDA64看一下, 是否msiexec.exe真有/m参数。
在这里插入图片描述
在这里插入图片描述
看到处理 /m 这个参数了,并没有报错,还是继续处理后面的参数。
初步看起来,确实处理这个参数了。
不过汇编看起来不好看啊。

要不用反证法,给一个不存在的参数,看是否报错就行了。
如果能实验出能报错的无效参数,那么就可以反证 /m参数是有效的。

在这里插入图片描述
/m改为/d, 这是一个不在命令行参数说明中的参数,此时,会弹出msiexec的参数说明界面。这说明/d参数是无效的。
程序处理参数的方式一般是一致的,既然/m从单步调试看,是被正常处理的;且不会弹出帮助界面。那么说明/m是有效的参数。

试试在目标.msi后面直接加参数的测试

go1.24.1.windows-amd64.msi /d

在这里插入图片描述
这说明直接在目标msi后面加上参数的效果和在 msiexec后面加的参数是一致的,也说明 /d这种无效参数,是会弹出msi帮助界面的。
看看目标msi加上/m参数的效果。
在这里插入图片描述
目标msi加/m参数,是可以正常运行msi的。
这说明,/m参数虽然没有在msi的标准命令行参数说明中,但是也是一个隐藏正常可用的参数。且根据前面实验的结果(日志中 Property(S): ALLUSERS = 1 // !!!),/m参数的作用,就是为所有用户安装程序。

备注

误打误撞实验出来的参数 /m可以为所有用户安装msi程序。

如果要按照msiexec的标准参数来为所有用户安装,请使用标准的参数
但是我用 /jm参数会弹出帮助界面啊,并不会安装。
莫非我看错了?
在这里插入图片描述

是不是msiexec的命令行参数写错了?
那么用 -m参数试试,带上日志,看看是否为所有用户安装

go1.24.1.windows-amd64.msi -m /log my_log_go1.24.1.windows-amd64.txt

正常安装完。
在这里插入图片描述
查看my_log_go1.24.1.windows-amd64.txt,看看是否有为所有用户安装的选项。

// 写了3个环境变量
WriteEnvironmentStrings: Name: PATH, Value: C:\Program Files\Go\bin, Action 1610612737
WriteEnvironmentStrings: Name: GOPATH, Value: %USERPROFILE%\go, Action 2
WriteEnvironmentStrings: Name: PATH, Value: %USERPROFILE%\go\bin, Action 1073741825
// ...
Property(S): WixUIRMOption = UseRM
Property(S): WIXUI_INSTALLDIR = INSTALLDIR
Property(S): ALLUSERS = 1 // !!! 确实是为所有用户安装了程序
Property(S): ARPNOMODIFY = 1
Property(S): ARPINSTALLLOCATION = C:\Program Files\Go\
Property(S): ProgramFiles64Folder = C:\Program Files\
Property(S): TARGETDIR = E:\
Property(S): ProgramMenuFolder = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\
Property(S): EnvironmentEntries = E:\
Property(S): SourceDir = D:\tools\go\
// ...
Property(S): LogonUser = me // !!! 我是在第2个用户上装的msi
// ...
Property(S): AdminUser = 1 // !!! 第2个用户也是管理员身份

备注

可能是msiexec的命令行帮助写错了。
也有可能是我理解错了。
反正要安装a.msi, 只要加上参数/m或者-m 就可以为所有用户安装a.msi程序。

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Stream两种list判断字符串是否存在方案

这里写自定义目录标题 背景初始化方法一、filter过滤方法二、anyMatch匹配 背景 在项目开发中&#xff0c;经常遇到筛选list中是否包含某个子字符串&#xff0c;有多种方式&#xff0c;本篇主要介绍stream流的filter和anyMatch两种方案&#xff0c;记录下来&#xff0c;方便备…

DeepSeek vs 通义大模型:谁将主导中国AI的未来战场?

当你在深夜调试代码时,是否幻想过AI伙伴能真正理解你的需求?当企业面对海量数据时,是否期待一个真正智能的决策大脑? 这场由DeepSeek和通义领衔的大模型之争,正在重塑中国AI产业的竞争格局。本文将为你揭开两大技术巨头的终极对决! 一、颠覆认知的技术突破 1.1 改变游戏…

3. 轴指令(omron 机器自动化控制器)——>MC_SetOverride

机器自动化控制器——第三章 轴指令 12 MC_SetOverride变量▶输入变量▶输出变量▶输入输出变量 功能说明▶时序图▶重启运动指令▶多重启动运动指令▶异常 MC_SetOverride 变更轴的目标速度。 指令名称FB/FUN图形表现ST表现MC_SetOverride超调值设定FBMC_SetOverride_instan…

从像素到世界:自动驾驶视觉感知的坐标变换体系

接着上一篇 如何让自动驾驶汽车“看清”世界?坐标映射与数据融合详解的概述,这一篇详细讲解自动驾驶多目视觉系统设计原理,并给出应用示例。 摘要 在自动驾驶系统中,准确的环境感知是实现路径规划与决策控制的基础。本文系统性地解析图像坐标系、像素坐标系、相机坐标系与…

附录B ISO15118-20测试命令

本章节给出ISO15118-20协议集的V2G命令&#xff0c;包含json、xml&#xff0c;并且根据exiCodec.jar编码得到exi内容&#xff0c; 读者可以参考使用&#xff0c;测试编解码库是否能正确编解码。 B.1 supportedAppProtocolReq json: {"supportedAppProtocolReq": {…

VLAN章节学习

为什么会有vlan这个技术&#xff1f; 1.通过划分广播域来降低广播风暴导致的设备性能下降&#xff1b; 2.提高网络管理的灵活性和通过隔离网络带来的安全性&#xff1b; 3.在成本不变的情况下增加更多的功能性&#xff1b; VLAN又称虚拟局域网&#xff08;再此扩展&#xf…

FPGA时钟约束

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、Create_clock 前言 时钟周期约束&#xff0c;就是对时钟进行约束。 一、Create_clock create_clock -name <name> -period <period> -waveform …

机房布局和布线的最佳实践:如何打造高效、安全的机房环境

机房布局和布线的最佳实践:如何打造高效、安全的机房环境 大家好,我是Echo_Wish。今天我们来聊聊机房布局和布线的问题,这可是数据中心和IT运维中的一个非常重要的环节。不管是刚刚接触运维的新人,还是已经摸爬滚打多年的老兵,都应该对机房的布局和布线有一个清晰的认识。…

spring-security原理与应用系列:建造者

目录 1.构建过程 AbstractSecurityBuilder AbstractConfiguredSecurityBuilder WebSecurity 2.建造者类图 SecurityBuilder ​​​​​​​AbstractSecurityBuilder ​​​​​​​AbstractConfiguredSecurityBuilder ​​​​​​​WebSecurity 3.小结 紧接上一篇文…

OpenHarmony子系统开发 - 电池管理(二)

OpenHarmony子系统开发 - 电池管理&#xff08;二&#xff09; 五、充电限流限压定制开发指导 概述 简介 OpenHarmony默认提供了充电限流限压的特性。在对终端设备进行充电时&#xff0c;由于环境影响&#xff0c;可能会导致电池温度过高&#xff0c;因此需要对充电电流或电…

xy轴不等比缩放问题——AUTOCAD c#二次开发

在 AutoCAD .net api里&#xff0c;部分实体&#xff0c;像文字、属性、插入块等&#xff0c;是不支持非等比缩放的。 如需对AutoCAD中图形进行xyz方向不等比缩放&#xff0c;则需进行额外的函数封装。 选择图元&#xff0c;指定缩放基准点&#xff0c;scaleX 0.5, scaleY …

如何在 HTML 中创建一个有序列表和无序列表,它们的语义有何不同?

大白话如何在 HTML 中创建一个有序列表和无序列表&#xff0c;它们的语义有何不同&#xff1f; 1. HTML 中有序列表和无序列表的基本概念 在 HTML 里&#xff0c;列表是一种用来组织信息的方式。有序列表就是带有编号的列表&#xff0c;它可以让内容按照一定的顺序呈现&#…

kafka的文章

1.面试的问题 要点 至多一次、恰好一次数据一致性超时重试、幂等消息顺序消息挤压延时消息 1.1 kafaka 生产消息的过程。 在消息发送的过程中&#xff0c;涉及到了两个线程&#xff0c;一个是main 线程&#xff0c;一个是sender 线程。在main 线程中创建了一个双端队列 Reco…

以mysql 为例,增删改查语法及其他高级特性

以下是 MySQL 的 增删改查语法及 高级特性的详细整理&#xff0c;结合示例说明&#xff1a; 1. 基础操作&#xff08;CRUD&#xff09; (1) 创建数据&#xff08;INSERT&#xff09; -- 单条插入 INSERT INTO users (id, name, email) VALUES (1, Alice, aliceexample.com);…

Postman最新详细安装及使用教程【附安装包】

一、Postman介绍 ‌Postman是一个功能强大的API测试工具&#xff0c;主要用于模拟和测试各种HTTP请求&#xff0c;支持GET、POST、PUT、DELETE等多种请求方法。‌通过Postman&#xff0c;用户可以发送请求并查看返回的响应&#xff0c;检查响应的内容和状态&#xff0c;从而验…

第十三章 : Names in Templates_《C++ Templates》notes

Names in Templates 重难点多选题设计题 重难点 1. 名称分类与基本概念 知识点&#xff1a; 限定名&#xff08;Qualified Name&#xff09;&#xff1a;使用::或.显式指定作用域的名称&#xff08;如std::vector&#xff09;非限定名&#xff08;Unqualified Name&#xff0…

整合vue+Element UI 开发管理系统

1、 安装 Node.js 和 npm 确保安装了 Node.js 和 npm。可以通过 Node.js 官网 下载。 2、 创建 Vue 项目 安装cli npm install -g vue/cli 使用 Vue CLI 创建一个新的 Vue 项目。 vue create admin-system cd admin-system npm run serve 出现这个页面表示vue创建成功 安…

3. 轴指令(omron 机器自动化控制器)——>MC_Stop

机器自动化控制器——第三章 轴指令 9 MC_Stop变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 MC_Stop 使轴减速停止。 指令名称FB/FUN图形表现ST表现MC_Stop强制停止FBMC_Stop_instance (Axis :《参数》 ,Execu…

C#中修饰符——abstract、virtual

一、多态简介 在面向对象编程的过程中&#xff0c;多态体现出来的是【一个接口&#xff0c;多个功能】&#xff1b;多态性体现在2个方面&#xff1a; 1、程序运行时&#xff0c;在方法参数、集合或数组等位置&#xff0c;派生类对象可以作为基类的对象处理&#xff1b;这样该对…

Spring Boot + Spring Integration整合MQTT打造双向通信客户端

1. 概述 本文分两个章节讲解MQTT相关的知识&#xff0c;第一部份主要讲解MQTT的原理和相关配置&#xff0c;第二个章节主要讲和Spring boot的integration相结合代码的具体实现&#xff0c;如果想快速实现功能&#xff0c;可直接跳过第一章节查看第二章讲。 1.1 MQTT搭建 为了…