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.pswp.cn/bicheng/74341.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74341.shtml
英文地址,請注明出處:http://en.pswp.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搭建 為了…