如何从控制台应用程序运行InstallScript项目

时间:2013-07-22 12:54:01

标签: c# console-application installshield installscript installscript-msi

我创建了一个主要升级(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。

1 个答案:

答案 0 :(得分:0)

这里有两个问题。首先,您没有有效的主要升级,如“添加/删除程序”中的两个条目所示。您已更改了ProductCode,但升级表条目(由FindRelatedProducts和RemoveExistingProducts执行)未检测到先前的安装并在升级过程中将其删除。有很多原因可以通过谷歌搜索找到。

第二个问题是,InstallScript MSI静默安装在背后是一种巨大的痛苦。它们要求您生成响应文件,然后使用它运行。这非常脆弱,这也是我建议继续使用Basic MSI的一个重要原因,这是一个更简单的故事。 (msiexec / I foo.msi / qn REBOOT = R并检查3010退出代码,表示需要重新启动并被禁止。)