C# Process.HasExited always true

本文关键字:true always HasExited Process | 更新日期: 2023-09-27 18:35:49

好的,我做了一个触发exe的示例网站(Site.aspx)。我能够运行exe。所以我遇到的问题是每当我触发exe时。警报消息会立即弹出,绕过进程。已退出并处理。等待退出,即使该过程尚未完成

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测试

.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 完成,而是直接转到其他代码

C# Process.HasExited always true

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

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

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

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

Thread.Sleep(10);

调用。

来自 Process.Start 的官方文档

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