我的产品有一个MSI安装程序,它需要MSOLEDBSQL驱动程序才能运行。我试图将驱动程序安装作为主安装程序的一部分,而不是作为先决条件(到目前为止就是这样处理的(。
以下是我为在主安装程序代码中安装驱动程序而编写的代码:
public static void InstallSQLDriver()
{
Logger.LogInfo("Installing the MSOLEDBSQL Driver");
ProcessStartInfo startInfo = new ProcessStartInfo("msiexec.exe", $"/i msoledbsql.msi /quiet IAcceptMSOLEDBSQLLicenseTerms=YES /qn ACCEPTEULA=1 /norestart ALLUSERS=1");
startInfo.Verb = "runas";
startInfo.UseShellExecute = true;
try
{
Process proc = Process.Start(startInfo);
proc.WaitForExit();
if (proc.ExitCode == 0)
{
Logger.LogInfo("MSOLEDBSQL Driver Installation successful");
}
else
{
Logger.LogInfo("MSOLEDBSQL Driver Installation failed. Process ended with code : " + proc.ExitCode);
}
}
catch (Exception ex)
{
Logger.LogInfo("MSOLEDBSQL Driver Installation failed with error : " + ex.Message);
}
}
然而,运行此操作会导致我出现错误,日志中的退出代码为1618,上面写着:Another installation is already in progress. Complete that installation before proceeding with this install.
我知道我们不能同时运行2个MSIs,但我们可以对我要做的事情进行任何更改吗?有人知道在我启动主应用程序的安装程序之前如何避免使用先决条件安装吗?
我认为您可以在InstallExecuteSequence
中的InstallValidate
和InstallInitialize
之间或在InstallFinalize
(也在InstallExecuteSequence
中(之后执行此操作(添加自定义操作(