我创建了一个重大升级(Installscript msi),通过单击 exe 文件执行时运行完美。
我还在创建一个控制台应用程序,它运行相同的 exe,但这次安装后,连同新版本一起,以前的版本显示在添加/删除程序列表中。
所有组件都安装正确,但
为什么只有当我从控制台应用程序运行 exe 时才会显示以前的版本?
// Enter the executable to run, including the complete path
start.FileName = @"folder1\MyISProj.exe";
// Do you want to show a console window?
start.CreateNoWindow = true;
start.WindowStyle = ProcessWindowStyle.Minimized;
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
// Run the external process & wait for it to finish
using (Process proc = Process.Start(start))
{
//proc.WaitForExit();
proc.Close();
}
我观察到的另一件事是,当我从控制台应用程序调用 exe 时,安装程序将打开并在接受 EULA 等之后,当实际安装开始时,控制台应用程序将再次被调用。为了阻止这种行为,我在 Main 方法中添加了一个检查,以仅运行一次控制台应用程序。现在,当安装程序再次尝试运行控制台应用程序时,它将检查进程是否已经在运行,如果是,它只是从控制台应用程序返回。
Process[] result = Process.GetProcesses();
foreach (var item in result)
{
if (item.ProcessName.Contains("MyISProj"))
{
Console.WriteLine("There is already a instance running.");
System.Environment.Exit(0);
return;
}
}
但在这样做之后,添加/删除程序列表也会显示两个条目。我必须做些什么来解决这个问题?我被这个问题困住了。
我正在使用InstallShield 2011 专业版来创建exe。