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测试
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 完成,而是直接转到其他代码
您正在尝试从 WEB 服务进程 (IIS) 运行 GUI 应用程序。 这很可能由于至少两个限制而失败:
- 不会从服务启动任何 GUI
- 文件和/或文件夹本身可能存在的访问权限问题。
所以是的,你是对的,进程在启动时就"退出"了。
另外 - 在 IIS 下的代码中等待某些内容是一个坏主意。 即使有一些
Thread.Sleep(10);
调用。
来自 Process.Start 的官方文档
此外,Start 可能会返回一个非空进程,其 HasExited 属性已设置为 true。在这种情况下,启动的进程可能已激活自身的现有实例,然后退出。