Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从控制台应用程序运行InstallScript项目_C#_Console Application_Installshield_Installscript_Installscript Msi - Fatal编程技术网

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

C# 如何从控制台应用程序运行InstallScript项目,c#,console-application,installshield,installscript,installscript-msi,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.

我已经创建了一个主要升级(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等之后,当实际安装开始时,控制台应用程序将再次被调用。为了停止这种行为,我添加了一个checkinmain方法,只运行控制台应用程序一次。现在,当安装程序再次尝试运行控制台应用程序时,它将检查进程是否已经在运行,如果是,它将从控制台应用程序返回

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。

这里有两个问题。首先,您没有有效的主要升级,添加/删除程序中的两个条目证明了这一点。您已经更改了ProductCode,但升级表条目(由FindRelatedProducts和RemoveExistingProducts执行)未检测到以前的安装并将其作为升级的一部分删除。从谷歌搜索中可以找到许多原因

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

MsiGetProperty(ISMSI_句柄,“ISACTIONPROP1”,szOldProductValue,nProSize);正在返回以前的现有产品代码。当我点击执行“exe”时,它工作正常,但当我从控制台应用程序运行相同的exe时,问题就出现了。我的不是无声安装。我只是调用代码中显示的exe。它是exe而不是msi,因此我无法使用MSIEXC。