gpt4 book ai didi

c# - 已安装 msi 文件时确定 msiexec 退出代码

转载 作者:行者123 更新时间:2023-11-30 20:24:52 24 4
gpt4 key购买 nike

我在另一个进程中启动 msiexec 并等待退出:

var p = new Process
{
StartInfo =
{
FileName = "msiexec",
Arguments = string.Format("/i \"{0}\" /qb", @"c:\install\setup.msi"),
Verb = "runas"
}
};
p.Start();
p.WaitForExit();
int exitCode = p.ExitCode;

如果之前没有安装 setup.msi,它会以静默模式安装并返回 0。这很正常。

但如果 setup.msi 已经安装(第二次启动此代码),则安装不会启动并返回代码 0 - 成功结果!但实际上文件并没有建立,因为产品已经安装好了。我如何确定这种情况?

最佳答案

您收到了 0 的退出代码,因为该产品已经安装并且您没有尝试安装新版本。换句话说,您的 MSI 没有新的产品代码和版本号,因此 MSIExec 安装程序将其视为重新配置并退出。我通过打开/log switch 测试了这一点并在安装我的一个 MSI 文件两次后读取输出。

MSI (c) (98:EC) [15:19:27:912]: Product: Product Name -- Configuration completed successfully. MSI (c) (98:EC) [15:19:27:912]: Windows Installer reconfigured the product. Product Name: Product Name. Product Version: 4.8.22. Product Language: 1033. Manufacturer: Manufacturer. Reconfiguration success or error status: 0.

如果您尝试安装产品的新版本并且您的 MSI 未配置为删除以前的版本,您将收到错误代码 1638。请在此处查看错误代码列表:MSDN

如果您想检查产品是否已经安装了现有的 MSI 信息(不是升级),您需要检查注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\YourProductCode

如果事实证明它已安装(根据系统/注册表 - 可能文件已被删除但仍被认为已安装)您可以尝试使用 /x/uninstall 开关 然后重新安装。您还可以使用 /fa 开关进行修复并重新安装所有文件。

msiexec.exe/x ProductCode 将卸载它。然后你可以在那之后再次运行安装。msiexec.exe/fa ProductCode 将修复所有文件。/f 开关有很多关于如何重新安装文件的不同选项,因此您最好阅读我在上面发布的 msiexec 开关文章的链接。

关于 msiexec 的一些其他注意事项:

/qb 显示一个基本的用户界面。您可能需要 /qn。当我设置我的实时更新软件时遇到了一堆问题,我必须确保我通过使用

从 system32 调用了 msiexec
p.StartInfo.FileName == Path.Combine(System.Environment.ExpandEnvironmentVariables("%windir%\\system32"), "MSIExec.exe"); 

关于c# - 已安装 msi 文件时确定 msiexec 退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25739347/

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