Batch file 安装MSI的批处理脚本

Batch file 安装MSI的批处理脚本,batch-file,windows-installer,installation,silent-installer,Batch File,Windows Installer,Installation,Silent Installer,我第一次尝试写一个.bat 我正在尝试使用脚本安装.msi,目前我们正在双击它手动安装 路径来自:d:/installed sw/$folder/.msi 路径:D:/program files/app/ $folder意味着每次都不同,因为我们要安装新的msi,这些msi是在当前日期创建的文件夹中提供的 以下是我正在尝试的脚本: @echo关闭 标题主机:在%computername%上安装更新 回显%computername% 设置服务器=\\SERVERNAME或PATH\msi文件夹 :

我第一次尝试写一个.bat

我正在尝试使用脚本安装.msi,目前我们正在双击它手动安装

路径来自:
d:/installed sw/$folder/.msi

路径:
D:/program files/app/

$folder
意味着每次都不同,因为我们要安装新的msi,这些msi是在当前日期创建的文件夹中提供的

以下是我正在尝试的脚本:

@echo关闭
标题主机:在%computername%上安装更新
回显%computername%
设置服务器=\\SERVERNAME或PATH\msi文件夹
:选择
cls
echo为安装任务选择以下MSI安装文件夹之一。
回声。
目录%server%/A:D/B
SET/P MSI=请输入要安装的MSI文件夹:
设置源=%server%\%MSI%
回显所选安装%MSI%
回声。
回声。
:验证
这对吗?
回声。
回声。
ECHO 0:中止安装
回声1:是的
回声2:否,请重新选择
设置/p选项=选择是、否或中止?[0,1,2]:
如果/i[%choice%]==[0]结束本地和转到结束
如果[%choice%]=[]转到BCurrentlocal
如果[%choice%]==[1]转到是
如果[%choice%]==[2]转到否
端部
:没有
转到选择
:是的
设置文件名=%MSI%
调用%source%\%FILENAME%.msi
回显开始%MSI%安装
暂停
正在退出安装脚本。。。。
PING-N4127.0.0.1>nul
出口
根据
设置服务器
我将路径添加到

SET/p MSI
用于来自的路径

然而,它不起作用


有人能告诉我我犯了什么错误吗?

这是如何以静默方式安装普通MSI文件的方法:

msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log"
快速解释:

 /L*V "C:\Temp\msilog.log"= verbose logging at indicated path
 /QN = run completely silently
 /i = run install sequence 
支持多种选项的功能非常广泛。下面是同一个命令行界面的示例。这是一个(被破坏的,通过回程机器复活的)

还可以使用如下Windows更新所示的结构,使批处理文件大大缩短

如果在设置过程中必须选中复选框,则必须找到附加到该复选框的相应,并在命令行中进行如下设置:

msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log" STARTAPP=1 SHOWHELP=Yes
这些属性在每个MSI中都不同。您可以通过详细日志文件或在中打开MSI来找到它们。必须在对话框控件部分或属性表中查找属性名称。尝试运行安装程序,首先创建详细的日志文件,然后在日志中搜索消息“Setting property…”,然后查看属性名称。然后将此属性以及日志文件中的值添加到命令行


除了设置命令行参数外,还可以了解如何使用转换自定义MSI:

这是一个批处理文件,它应该适用于您:

@echo关闭
标题主机:在%computername%上安装更新
回显%computername%
设置服务器=\\SERVERNAME或PATH\msi文件夹
:选择
cls
echo为安装任务选择以下MSI安装文件夹之一。
回声。
目录“%Server%”/AD/ON/B
回声。
设置/P“MSI=请输入要安装的MSI文件夹:”
设置“包=%Server%\%MSI%\%MSI%.MSI”
如果不存在“%Package%”(
回声。
回显输入的文件夹/MSI文件不存在^(键入错误^)。
回声。
setlocal EnableDelayedExpansion
设置/P“重试=重试[Y/N]:”
如果/I“!重试!”==“Y”结束本地并转到选择
端部
后藤:EOF
)
回声。
回显所选安装:%MSI%
回声。
回声。
:验证
这对吗?
回声。
回声。
echo 0:中止安装
回声1:是的
回声2:否,请重新选择
回声。
设置/p“选择=选择是、否或中止?[0,1,2]:
如果[%choice%]==[0]转到:EOF
如果[%choice%]==[1]转到是
转到选择
:是的
回声。
正在运行%MSI%安装的回显。。。
启动“安装MSI”/等待“%SystemRoot%\system32\msiexec.exe”/i/quiet“%Package%”
在命令提示窗口中输入时,最后一页输出中列出的字符在批处理文件中具有特殊意义。在字符串中也使用括号和方括号,这些字符应按字面解释。因此,有必要将字符串括在双引号中,或者使用字符
^
对这些字符进行转义,如上面代码中所示,否则命令行解释器会因为语法错误而退出批处理执行

而且不可能调用扩展名为MSI的文件。*.msi文件不是可执行文件。双击MSI文件时,Windows将在注册表中查找与此文件扩展名关联的应用程序,以执行打开操作。要使用的应用程序是
msiexec
,带有命令行选项
/i
,用于在MSI包中安装应用程序

运行
msiexec.exe/?
在GUI窗口中获取可用选项或查看

我已经在静默安装所需的选项
/I
中添加了
/quiet


在上面的批处理代码中,命令
start
与选项
/wait
一起使用,以启动Windows应用程序
msiexec.exe
,并保持批处理文件的执行,直到安装完成(或中止)

尽管这可能看起来不合主题,但没有人愿意检查错误级别。当我使用你的建议时,我试图在MSI安装后立即检查错误。我故意让它失败,并注意到在命令行上,所有的工作都很好,而在批处理文件中,msiexec似乎没有设置错误。在那里试过不同的东西,比如

  • 使用启动/等待
  • 使用!错误等级!变量,而不是%ERRORLEVEL%
  • 使用SetLocal EnableDelayedExpansion

什么都不管用,最让我恼火的是它在命令行中工作。

谢谢。我正在尝试上面的,将尝试与演示。微星也,我们习惯于点击2个复选框,而安装,无声安装也会照顾到这一点吗?