我有一个非常讨厌的问题。
我有一个应用程序,其中包含构建.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();
}
谢谢你的任何想法。如果我应该提供更多细节,请告诉我。
答案 0 :(得分:2)
日志似乎没问题,我很确定问题不是由软件包引起的。
我能想到的唯一原因是路径不正确或MSI文件不正确。根据您的代码,我假设您正在尝试处理某种更新,可能还有下载的MSI文件。
尝试调试应用程序,以查看 file 变量中存储的路径。在执行Process.Start之前,转到该路径并检查MSI:
也许这是旧的MSI文件而不是新文件。如果不是,请尝试在Process.Start之前使用和不使用 / qn 手动运行命令行。