好的我做了一个触发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完成该站点直接进入其他代码
答案 0 :(得分:1)
来自official documentation of Process.Start
<块引用>此外,Start 可能会返回一个非空进程,其 HasExited 属性已设置为 true。在这种情况下,启动的进程可能已经激活了自身的现有实例,然后退出。
答案 1 :(得分:0)
您正在尝试从WEB服务进程(IIS)运行GUI应用程序。由于至少有两个限制,这很可能失败了:
所以是的,你是对的,过程就像它开始时一样'退出'。
另外 - 在IIS下的代码中等待某些东西是个坏主意。即使有一些
Thread.Sleep(10);
呼叫。