【问题标题】:ExitCode 1603 when silently installing a .msi静默安装 .msi 时出现 ExitCode 1603
【发布时间】:2017-11-17 02:50:03
【问题描述】:

我正在尝试编写一个静默安装 .msi 的脚本。当我从 Powershell 命令行将命令作为带有参数 /qn 的 ./thing.msi 运行时,它工作得很好。 但是,现在它位于脚本中,它返回 1603 错误(“安装期间发生致命错误”)。如果我尝试切换它并在有或没有 /quite 的情况下转到 /qb,它会运行,但它不是静默的。使用 -WindowStyle Hidden 也无济于事。有什么想法吗?

$InsightInstall = Start-Process -FilePath $PSScriptRoot\support.msi -
ArgumentList "/quiet /qb" -Wait -Passthru -WindowStyle Hidden
if($InsightInstall.ExitCode -eq 0)
{
    Write-Host "Installation complete."
}
else
{
    Write-Host "Failed with ExitCode" $InsightInstall.ExitCode
    pause
}

【问题讨论】:

  • 我想你想打电话给 msiexec:$InsightInstall = Start-Process msiexec -ArgumentList "/i $PSScriptRoot\support.msi /qn" -Wait -Passthru -WindowStyle Hidden
  • 嗨,本,感谢您的回复!不幸的是,我也尝试过。它最终返回 1603(但只有当我从脚本运行它时,当我直接在命令行中运行它时它工作得很好。)
  • 1603 只是通用故障代码。编写详细日志以获取更多错误详细信息:-ArgumentList "/quiet /l*v logfile.txt"。顺便说一句,同一命令行上的/quietqb 毫无意义。 /quiet 等价于/qn(参见reference)。
  • 感谢您提供信息,@zett42!我不知道/quiet/qn 是一回事。我按照您的建议制作了一个详细的日志文件,它确实制作了一个非常详细的日志文件。我现在正在滚动它。关于应该寻找什么来加快这一进程的任何建议? (我对 Powershell 和有用的 useful 脚本还很陌生,所以如果我的问题简单到愚蠢,请原谅我。)
  • 泽特,伙计,这种帮助是无价的。我最终发现管理员有权访问的文件夹(我当然是)不允许我在其中工作。脚本很好,一个非常奇怪的权限事情不太好。我通过阅读“返回值 3”上方的日志消息并搜索结果发现了这一点。你这个男人,希望我能投票给 cmets。

标签: powershell windows-installer


【解决方案1】:

你不需要那么努力(我认为不需要Start-Process)。只需运行msiexec 并指定包,然后是参数。

msiexec /i d:\path\package.msi /quiet

【讨论】:

  • 嗨,比尔,感谢您的回答。不幸的是,除非我误解了某些东西,否则这只是一个在命令行中工作的命令。我需要使用 -PassThru 将其存储到一个对象中,以便我可以监控 ExitCodes。像那样运行它并不允许我这样做(无论如何,不​​是以我知道的方式。)
  • 你真的试过了吗?当msiexec.exe 完成时,PowerShell 会将退出代码放入$LASTEXITCODE 变量中。
  • 如果我不这样做,我就不会说它不起作用(那只会浪费大家的时间)。我用 $LASTEXITCODE 变量再次尝试了它。当它退出时,变量是空的,所以它什么也不做。安装失败,但我在输入时没有收到任何红色错误消息。我也尝试在其上使用 Invoke-Command,但最终吐出我们的红色文本。 "无法使用指定的命名参数解析参数集。"
  • msiexec.exe 退出代码记录在 here
  • Bill,结果证明这是一个非常奇怪的权限问题,管理员有权访问的文件夹(我当然是)是我无权访问的文件夹。代码很好,可以运行。感谢您在这个问题上的帮助(希望我能投票支持 cmets)。
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多