1

我有一个非常烦人的问题。

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

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

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

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

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

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

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

以下是调用设置的应用程序的代码:

    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();
    }

谢谢你的任何想法。让我知道我是否应该提供更多详细信息。

4

1 回答 1

2

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

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

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

  • 用逆戟鲸打开它
  • 选择属性表
  • 检查制造商和产品版本属性

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

于 2011-09-22T19:24:10.547 回答