最近需要制作软件安装包,需要附带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://www.kinber.cn/post/5855.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
