gpt4 book ai didi

installation - 当软件包已安装时 msiexec 安静安装

转载 作者:行者123 更新时间:2023-12-02 22:40:17 24 4
gpt4 key购买 nike

我遇到以下有问题的情况:

有问题的场景描述开始----------------------------------------

我使用 msiexec 通过以下方式以安静模式安装软件包:

msiexec /i c:\mypackage.msi /quiet

现在我已经安装了该软件包。假设我再次输入上面的命令:

msiexec /i c:\mypackage.msi /quiet

有问题的场景描述结束----------------------------------------

现在由于软件包已经安装,安装应该会失败。但我没有任何迹象表明这一点。

我使用日志选项来获取日志:

msiexec /i c:\mypackage.msi /quiet /l* log.txt

当发生错误时,我确实在日志中看到它们,但在上面描述的场景中,日志是空的。系统事件日志中也没有写入任何内容。所以我的问题是,如何获得安装(第二个)未进行的指示?

注释:

我不愿意通过编写一个批处理脚本来解决这个问题,该脚本将在调用 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

关于installation - 当软件包已安装时 msiexec 安静安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/945425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com