使用silent参数调用时,MSI会继续安装旧版本

时间:2011-09-22 16:32:12

标签: windows-installer silent-installer

我有一个非常讨厌的问题。

我有一个应用程序,其中包含构建.msi的解决方案中包含的安装项目。我使用VS 2008。 我已经增加了安装项目的版本 - 在解决方案资源管理器中选择项目,按F4,增加版本,并修改“制造商”和“作者”字段。然后我重建了应用程序和安装项目。

然后发生最奇怪的事情:当我以非静默方式运行生成的.msi文件时,它会在正确的C:\ Program Files(x86)[Manufacturer] \ path中安装最新版本。

但是当我从应用程序代码调用安装文件时,使用静默参数:

processStartInfo.Arguments = "/i " + "\"" + file + "\"" + "/qn";

...然后它安装以前的版本(增加安装项目版本之前的版本),并将它安装在旧的制造商路径中。

.msi安装文件是否在其中存储了两个版本,它们包含不同的变量/设置属性?!我很难过,非常恼火,我现在已经在这个问题上失去了四个小时。 我删除了临时文件。我已经验证了正确的.msi是正确的路径十几次。

我还需要强制.msi在使用silent参数安装时考虑更新的设置属性。

以下是调用setup:

的应用程序中的代码
    private static void RunSetupFile()
    {
        string file = Path.Combine(Utils.GetAppTempPath(), Utils.ApplicationUpdate_SetupFileName);
        ProcessStartInfo psi = new ProcessStartInfo(Path.Combine(Environment.SystemDirectory, "msiexec.exe"));
        psi.WindowStyle = ProcessWindowStyle.Hidden;
        psi.Arguments = "/i " + "\"" + file + "\"" + "/qn"; 
        psi.UseShellExecute = true;
        psi.Verb = "runas";
        try
        {
            Process process = Process.Start(psi);
        }
        catch (System.ComponentModel.Win32Exception)
        {
        }
    }

以下是调用上述方法的代码,也许这里是罪魁祸首:

    public static void InitializeAppUpdate()
    {
        DownloadNewSetupVersionFromServer();
        RunSetupFile();
        Utils.CloseApplication();
    }

谢谢你的任何想法。如果我应该提供更多细节,请告诉我。

1 个答案:

答案 0 :(得分:2)

日志似乎没问题,我很确定问题不是由软件包引起的。

我能想到的唯一原因是路径不正确或MSI文件不正确。根据您的代码,我假设您正在尝试处理某种更新,可能还有下载的MSI文件。

尝试调试应用程序,以查看 file 变量中存储的路径。在执行Process.Start之前,转到该路径并检查MSI:

  • 使用Orca
  • 打开它
  • 选择属性表
  • 检查制造商和ProductVersion属性

也许这是旧的MSI文件而不是新文件。如果不是,请尝试在Process.Start之前使用和不使用 / qn 手动运行命令行。