我有一个非常烦人的问题。
我有一个应用程序,其中包含构建 .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();
}
谢谢你的任何想法。让我知道我是否应该提供更多详细信息。