我有一个命令行程序,可以在DOS窗口中以交互方式运行。当我尝试从asp.net应用程序中执行相同的命令和参数时,它会失败。该网络应用程序有脚本&执行权限。出于测试目的,我为整个Web应用程序文件夹和包含.exe文件的文件夹(驻留在Program Files中)的Everyone组授予了完全控制权限。 Web应用程序使用Windows集成安全性(无匿名),因此它应该使用我的凭据,我是一名管理员。在WIndows XP中运行。
以下代码运行命令。文件名和参数看起来很好。但是p.ExitCode = 1而不是0.如何排除故障并找出进程失败的原因?我查看了调试器中的进程,我看到了一些'System.InvalidOperationException'异常,但这并没有告诉我多少。为什么InvalidOperationException?
Process p = new Process();
p.StartInfo.FileName = filename;
p.StartInfo.Arguments = arguments;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = true;
p.StartInfo.RedirectStandardOutput = false;
p.StartInfo.RedirectStandardError = false;
p.Start();
p.WaitForExit();
if (0 != p.ExitCode)
{
ApplicationException ex =
new ApplicationException(string.Format("\"{0} {1}\" returned ({2})", filename, arguments, p.ExitCode));
throw ex;
}
答案 0 :(得分:0)
应用程序可以执行各种操作,但在不幸的情况下由另一个应用程序运行会导致问题,没有更多信息,只有太多选项。
您可能需要重定向标准输出和/或标准错误才能找出问题所在(或者如果命令行程序是.NET,您的Windows事件日志中可能会出现错误)。
对于简单的测试,您可以做一些简单的事情:
p.StartInfo.RedirectStandardError = true;
p.Start();
p.WaitForExit();
string err = p.StandardError.ReadToEnd();
请注意,对于真正的构建,您需要一个更复杂的线程解决方案,就像控制台应用程序将过多数据写入标准错误一样,它将填充缓冲区并挂起。如果您需要,我可以为您提供更强大的控制台输出解决方案,但这可能会为您提供调试信息。
答案 1 :(得分:0)
网络应用正在使用Windows 综合安全(没有匿名)所以 它应该使用我的凭据而我 管理员
不,那不对。除非启用ASP.NET模拟,否则工作进程仍在ASPNET下运行Windows XP默认设置。