×

在Windows中如何实现实现自动化安装/卸载程序

hqy hqy 发表于2025-11-08 01:57:30 浏览8 评论0

抢沙发发表评论

最近需要制作软件安装包,需要附带VC运行时和.Net Framework的安装,但又不想让用户自己点下一步,所以就有了以下操作。

微软提供了一个程序叫msiexec.exe,位于C:\Windows\System32

msiexec提供了从命令行安装、修改Windows安装包等功能。常见的如.msi这样的安装包。

打开Powershell/cmd,输入


msiexec /?


可以看到详细的参数

图片


这里主要介绍一下如何自动安装/卸载。如果需要更详细的使用,可以访问

 https://docs.microsoft.com/zh-cn/windows/win32/msi/command-line-options?redirectedfrom=MSDN


安装 

msiexec /i "xxxxx.msi" /qr

/q是安静模式,无用户交互,/q后面再带上nbrf,可以设置软件安装界面的显示方式

/q[n|b|r|f]
设置用户界面级别
n - 无用户界面
b - 基本界面
r - 精简界面
f - 完整界面(默认值)


例如:使用Powershell下载并安装MICROSOFT® REPORT VIEWER 2015 RUNTIME

说明:最后一行是执行安装的命令
























#添加程序集Add-Type -AssemblyName System.IOAdd-Type -AssemblyName System.IO.CompressionAdd-Type -AssemblyName System.IO.Compression.FileSystem
#下载地址$DownloadUrl = "https://download.microsoft.com/download/A/1/2/A129F694-233C-4C7C-860F-F73139CF2E01/ENU/x86/ReportViewer.msi"#下载到Temp目录$TempPath = $env:TEMP#下载的文件名$FileName = "ReportViewer.msi"#存储的完整文件路径$FullPath = "$TempPath\$FileName"
#Download$client = New-Object System.Net.WebClient"Now is downloading MICROSOFT® REPORT VIEWER 2015 RUNTIME"$client.DownloadFile($DownloadUrl$FullPath)"Download success"
#Installmsiexec.exe /i $FullPath /qr"Press any key to exit"Read-Host


运行以后,如下

图片


卸载

msiexec /x /package <Product.msi | ProductCode> /qr

可以指定原始msi安装包,也可以指定ProductCode。

ProductCode可以从注册表以下位置查找:

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall


例如:使用Powershell卸载MICROSOFT® REPORT VIEWER 2015 RUNTIME的命令如下


msiexec.exe /x "{3ECE8FC7-7020-4756-A71C-C345D4725B77}" /qr


图片


如果是压缩包式的安装包,如 Microsoft Visual C++ 2015 Redistributable,

可以直接使用 vc_redist.x86.exe /?查看自动化安装的参数。

也可以使用Winrar等压缩软件,解压出msi安装包,继续使用msiexec.exe执行自动化安装。

这样就可以自动安装软件运行环境了。

注意:对于需要管理员权限的安装包,Powershell/cmd要以管理员权限运行,再执行msiexec,否则会弹出UAC对话框。


通过C#执行

可以封装一下如下的函数

path传入msiexec.exe 

args传入安装参数
















 private static void Install(string path,string args) {     //msiexec.exe /i xxx.msi /qr     System.Diagnostics.Process p = new System.Diagnostics.Process();     p.StartInfo.FileName = path;     p.StartInfo.Arguments = args;     p.StartInfo.UseShellExecute = false;     p.StartInfo.RedirectStandardError = true;     p.StartInfo.CreateNoWindow = false;     p.Start();     p.BeginErrorReadLine();     p.WaitForExit();     p.Close();     p.Dispose(); }


打赏

本文链接:https://kinber.cn/post/5855.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客