process.waitforexit挂起

时间:2013-12-18 11:15:56

标签: asp.net c#-4.0 process

不要记下downvote,直到你没有完全阅读它。 但是同一个标题存在很多问题,它们都没有工作,我想解决我的具体问题。请帮忙。

我正在使用C#4.0 Asp.Net应用程序, 在按钮上的网页上单击我想创建一个exe。 所以我使用 devenv.exe ,但它挂在 process.waitforexit 命令上。

这是有效的,超过7个monnths,但在两天之前突然停止工作。 它也在localhost上工作,在服务器上发布后它无法正常工作。 代码在

之下
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE\\devenv.exe";
process.StartInfo.Arguments = @"D:\ProjFolder\xxx.sln /rebuild";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.ErrorDialog = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;

OutputMsg = "";

if (!process.Start())
{
    OutputMsg = "failed.</br>";
    OutputMsg += process.StandardError.ReadToEnd();
    HttpContext.Current.Response.Write(OutputMsg);
    return false;
}
// Some people said that this is buffer problem, you should release it by reading
// output, i used "ReadToEnd" that is not working, so trying this again, and also it
// is not working
//while (!process.StandardOutput.EndOfStream)
//{
//string outputmsg = process.StandardOutput.ReadLine();
//HttpContext.Current.Response.Write(outputmsg);
//}
//string output = process.StandardOutput.ReadToEnd();

process.WaitForExit(60000);
if (process.HasExited)
{
    OutputMsg = "Succeeded.";
    HttpContext.Current.Response.Write(OutputMsg);
}
else
{
    OutputMsg = "Process not completed properly.";
    process.Kill();
    HttpContext.Current.Response.Write(OutputMsg);
    return false;
}

2 个答案:

答案 0 :(得分:1)

正如@Damien_The_Unbeliever所说,我尝试了 MSBuild.Exe ,并且效果很好。 现在还没有认识到为什么devenv.exe停止工作。

然而,msbuild.exe运行良好。

注意:MSBuild.exe可以通过命令提示符使用,并通过编码编译项目,我们可以使用这个命令行实用程序。

msbuild.exe位于以下位置,请关注版本

C:\Windows\Microsoft.Net\Framework\v2.0.50727\MSBuild.exe
C:\Windows\Microsoft.Net\Framework\v3.5\MSBuild.exe
C:\Windows\Microsoft.Net\Framework\v4.0.30319\MSBuild.exe

目标项目/解决方案框架版本和msbuild.exe版本应该相同。

如果有人需要有关msbuild.exe的帮助,此链接可能过于使用http://msdn.microsoft.com/en-us/library/ms164311%28v=vs.90%29.aspx 它包含整个命令行参数文档

Thanx @Damien_The_Unbeliever提示。

答案 1 :(得分:0)

如果它在2天前工作,并且你没有更改任何东西给你的代码,那么看看arround权限,可能是因某些原因改变了服务器上的权限。

其他方式,如果在(asp.net应用程序或.exe)的代码上发生某些更改,请先退后一步(取消上次更改),如果有效则再试一次,如果有,然后深入了解你的变化,问题就在那里。

关于进程超时的问题,它不应超过http请求超时(默认设置为20秒)。