1

好的,我制作了一个触发 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>");

}

好的,这是 EXE IM RUNNING
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 完成,而是直接进入其他代码

4

2 回答 2

1

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

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

所以是的,你是对的,进程在启动时就“退出”了。

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

Thread.Sleep(10);

来电。

于 2013-10-17T09:32:44.147 回答
1

来自Process.Start 的官方文档

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

于 2021-03-11T12:07:18.130 回答