C#Process.HasExited始终为true

时间:2013-10-17 09:19:27

标签: c# visual-studio-2010

好的我做了一个触发exe的示例网站(Site.aspx)。我能够运行exe。所以我得到的问题是每当我触发exe ..警告消息立即弹出绕过proc.HasExited和proc.WaitForExit,即使进程尚未完成

protected void Button1_Click(object sender, EventArgs e)
{

        string run = @"C:\Documents and Settings\blabla\Desktop\Test\Test.exe";
        ProcessStartInfo start = new ProcessStartInfo();
        start.FileName = run;
        start.UseShellExecute = false;
        Process proc;
        proc = Process.Start(start);

            while (!proc.HasExited)
            {
            }
            proc.WaitForExit();        
            Response.Write("<script>alert('done')</script>");

}

好的,这就是我的运行 TEST.EXE

static void Main(string[] args)
        {

            int i = 0;
            while (i < 5)
            {
                Console.Write("While statement ");
                // Write the index to the screen.
                Console.WriteLine(i);
                // Increment the variable.
                i++;
                Thread.Sleep(2000);
            }


        }

没有错误。我能够通过单击按钮来运行exe,但不是等待exe完成该站点直接进入其他代码

2 个答案:

答案 0 :(得分:1)

来自official documentation of Process.Start

<块引用>

此外,Start 可能会返回一个非空进程,其 HasExited 属性已设置为 true。在这种情况下,启动的进程可能已经激活了自身的现有实例,然后退出。

答案 1 :(得分:0)

您正在尝试从WEB服务进程(IIS)运行GUI应用程序。由于至少有两个限制,这很可能失败了:

  • 将不会从服务中启动任何gui
  • 文件和/或文件夹本身可能存在访问权限问题。

所以是的,你是对的,过程就像它开始时一样'退出'。

另外 - 在IIS下的代码中等待某些东西是个坏主意。即使有一些

Thread.Sleep(10);

呼叫。