use*_*637 5 installer windows-installer
我有以下有问题的情况:
有问题的Scenrio描述开始---------------------------
我使用msiexec以安静模式安装软件包,方法如下:
msiexec /i c:\mypackage.msi /quiet
Run Code Online (Sandbox Code Playgroud)
现在我安装了包.假设我再次输入上面的命令:
msiexec /i c:\mypackage.msi /quiet
Run Code Online (Sandbox Code Playgroud)
有问题的Scenrio描述结束---------------------------
现在,由于已经安装了软件包,因此安装失败.但我没有迹象表明.
我使用日志选项来获取日志:
msiexec /i c:\mypackage.msi /quiet /l* log.txt
Run Code Online (Sandbox Code Playgroud)
发生错误时,我会在日志中看到它们,但在上面描述的场景中,日志为空.系统事件日志中也没有写入任何内容.所以我的问题是,我怎样才能得到安装(第二个)没有出现的迹象?
笔记:
我不愿意通过编写一个批处理脚本来解决这个问题,该脚本将在调用msiexec之前检查是否安装了包.原因是它与我们的客户部署要求相矛盾.
我有一个DLL自定义动作数据,在第二次,DLL没有激活所以我不能使用DLL,以便在某处写入失败.
如果已安装软件包,则安装不会失败,它已"成功重新配置"
为了检查系统上是否安装了Windows Installer程序包,您最好使用Windows SDK(而不是批处理文件) - 这是一个示例脚本,它迭代已安装产品的列表并触发MSIEXEC(如果是尚未安装.(此示例按名称搜索,或者您可以按包代码搜索)
Option Explicit
Dim productName:productName = "My Awesome Product"
Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer")
Dim productCode, property, value, message
For Each productCode In installer.Products
If InStr(1, LCase(installer.ProductInfo(productCode, "ProductName")), LCase(productName)) Then Exit For
Next
If IsEmpty(productCode) Then
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
WshShell.Exec("msiexec /i mypackage.msi /qb")
Else
Wscript.Echo productName & " is already installed."
Wscript.Quit 2
End If
Run Code Online (Sandbox Code Playgroud)