asp.net运行脚本
问题描述:
我有以下方法:asp.net运行脚本
protected void RunWSFScript()
{
try
{
System.Diagnostics.Process scriptProc = new System.Diagnostics.Process();
scriptProc.StartInfo.FileName = @"cscript";
scriptProc.StartInfo.Arguments = "\\\\server\\folder\\script.wsf \\\\server\\folder\\"
+ file + ".xml";
scriptProc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //prevent console window from popping up
scriptProc.Start();
scriptProc.WaitForExit();
scriptProc.Close();
string message = @"Please verify output.";
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<script type = 'text/javascript'>");
sb.Append("window.onload=function(){");
sb.Append("alert('");
sb.Append(message);
sb.Append("')};");
sb.Append("</script>");
ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", sb.ToString());
}
catch
{
string message = "An error has occured. Please try again.";
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<script type = 'text/javascript'>");
sb.Append("window.onload=function(){");
sb.Append("alert('");
sb.Append(message);
sb.Append("')};");
sb.Append("</script>");
ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", sb.ToString());
}
}
我遇到的问题是,该脚本正确执行,当我在本地运行调试时,但之后,我已经把网站上的那个方法iis服务器不再执行,我也没有收到任何错误。
可能是什么问题?
答
这很可能是一个权限问题 - 服务帐户可能无法写入您指定的目录,或者它没有权限读取脚本文件本身。
但是,你更大的问题是你的错误处理不够健壮。特别是,如果脚本导致错误,您将永远无法检测到(如您已经发现的那样!!)。
你需要做些什么来解决这个问题,取决于脚本如何报告错误。您通常需要重定向StandardOutput和StandardError,并检查exit code。
以下是的一个可能的执行的粗略轮廓。您需要根据您的脚本和环境进行调整。
System.Diagnostics.Process scriptProc = new System.Diagnostics.Process();
scriptProc.StartInfo.FileName = @"cscript";
scriptProc.StartInfo.RedirectStandardOutput = true;
scriptProc.StartInfo.RedirectStandardError = true;
scriptProc.StartInfo.Arguments = @"\\server\some\folder\script.wsf";
scriptProc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
scriptProc.Start();
// Read out the output and error streams *before* waiting for exit.
string output = p.StandardOutput.ReadToEnd();
string error = p.StandardError.ReadToEnd();
// Specify a timeout to ensure it eventually completes - this is
// unattended remember!!
scriptProc.WaitForExit(10000);
scriptProc.Close();
// Check the exit code. The actual value to check here will depend on
// what your script might return.
if (script.ExitCode != 0)
{
throw new Exception(
"Oh noes! Exit code was " + script.ExitCode + ". " +
"Error is " + error + ". " +
"Output is " + output);
}
谢谢。是的,我知道错误处理还远远没有完成,我只是想让脚本先执行然后移到那个脚本上。基本上每个人都通过NTLM登录到网站,并且每个人都可以完全控制文件夹/文件,所以我还应该检查什么? – user1468537 2012-07-10 06:46:54
已经尝试了上面的内容,并且当它到达这一行''''''''''''''''''''''''或'string error = scriptProc.StandardError.ReadToEnd();'' – user1468537 2012-07-10 07:28:07
不知道错误是什么正面临的是你在黑暗中拍摄。这就是为什么你需要在尝试修复你的bug之前让你的错误处理得到修复。 ReadToEnd()调用抛出什么错误? – 2012-07-10 07:43:27