使用Powershell实现自动化安装/卸载程序
最近需要制作软件安装包,需要附带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.IO
Add-Type -AssemblyName System.IO.Compression
Add-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" #Install
msiexec.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执行自动化安装。
这样就可以自动安装软件运行环境了。
注意:msiexec要以管理员权限运行,否则会弹出UAC对话框。要么就关闭UAC功能。
使用Powershell实现自动化安装/卸载程序的更多相关文章
- 帮同事写了几行代码,在 安装/卸载 程序里 注册/卸载 OCX控件
写了个小控制台程序,这个程序用来注册 / 卸载OCX控件,用在Inno Setup做的安装卸载程序里. #include "stdafx.h" #include <windo ...
- WPF 自己动手来做安装卸载程序
原文:WPF 自己动手来做安装卸载程序 前言 说起安装程序,这也许是大家比较遗忘的部分,那么做C/S是小伙伴们,难道你们的程序真的不需要一个炫酷的安装程序么? 声明在先 本文旨在教大家以自己的方式实现 ...
- 用Setup系列函数完成驱动卸载安装[驱动安装卸载程序]
// InstallWDFDriver.cpp : Defines the entry point for the console application. // #include "std ...
- centos7 安装卸载程序rpm使用方法
1.安装 rpm 包: ➢ 基本语法 rpm -ivh RPM 包全路径名称 2.卸载 rpm 包: ➢ 基本语法 rpm -e RPM 包的名称 ➢ 应用案例 删除 firefox 软件包 rpm ...
- Linux如何安装卸载软件
Linux 中如何卸载已安装的软件. Linux软件的安装和卸载一直是困扰许多新用户的难题.在Windows中,我们可以使用软件自带的安装卸载程序或在控制面板中的“添加/删除程 序” 来实现.与其相类 ...
- PowerShell将Windows store应用程序安装为开发者模式
原文: PowerShell将Windows store应用程序安装为开发者模式 在本地部署Windows 商店应用程序时,我们会遇到Add-AppDevPackage.ps1脚本,这个脚本和所在安装 ...
- inno安装卸载时检测程序是否正在运行卸载完成后自动打开网页-代码无效
inno安装卸载时检测程序是否正在运行卸载完成后自动打开网页-代码无效 inno setup 安装卸载时检测程序是佛正在运行卸载完成后自动打开网页-代码无效 --------------------- ...
- Inno Setup 在安装程序开始前和卸载程序开始前,检查并关闭运行的进程
(2011-12-29 11:54:56) 转载▼ 标签: innosetup it 分类: 开发工具经验累积 Inno Setup在安装程序前,如果有使用的进程在运行,会有错误提示,而使得Insta ...
- InnoSetup打包exe安装应用程序,并添加卸载图标 转
http://blog.csdn.net/guoquanyou/article/details/7445773 InnoSetup真是一个非常棒的工具.给我的印象就是非常的精干.所以,该工具已经一步步 ...
随机推荐
- 【CSP膜你赛】大逃亡
题目描述 魔王撒旦为了建立魔物的乐土,率领亚多拉玛雷克.艾谢尔.路西菲尔.以 及马纳果达这四位恶魔大元帅进攻人类世界.然而此时手持圣剑的勇者艾米莉亚出现了. 战败的魔王逃跑时穿越到了地球,以真奥贞夫 ...
- linux修改/etc/profile权限
修改/etc/profile时提示为只读文件,不允许修改, 敲#chmod 777 /etc/profile后仍不允许修改 解决办法: 在root权限下敲 #:mount -o remount,rw ...
- CentOS里下载和离线安装rpm包
离线下载rpm包 yum --downloadonly --downloaddir=/home/packages install mariadb-devel 安装离线rpm包 进入下载包的 ...
- .htaccess tricks总结
目录 .htaccess tricks总结 一.什么是.htaccess 二.利用条件 三.利用方式 && tricks 1.将指定后缀名的文件当做php解析 2.php_value利 ...
- hdu2094产生冠军[STL set]
目录 题目地址 题干 代码和解释 参考 题目地址 hdu2094 题干 代码和解释 题意可以这样理解:一个人只要没输过就可以是冠军,如果没输过的人恰为一位,那就认他为冠军,若少于或多于一位,则判定没有 ...
- leetcode: 最长上升子序列
题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 ...
- [Web] mobx 异步操作
转载自:https://www.jianshu.com/p/66dd328726d7 异步action action只能影响正在运行的函数,而无法影响当前函数调用的异步操作 .action 包装/装饰 ...
- Unity2D音游案例-节奏大师教程+源码+素材
Unity2D音游案例-节奏大师(Unity2017.2 ,基于Koreographer),本案例涉及到一些音乐音频音波的一点点内容. 首先,我们会把音游的核心功能实现,之后几个重要内容会出给思路并带 ...
- Oracle之clob字段不能union的问题
原因:由于clob类型字段不能使用group by函数,而union中需要使用group by过滤掉重复纪录: 解决方法:union可以改为union all.
- C# 序列化与反序列化之xml通过实现IXmlSerializable进行序列化的解决方案
新建控制台console项目,添加XmlPersonIXmlSerializable类,和AddressIXmlSerializable类(实现IXmlSerializable)以及AddressIX ...