2012-07-09 103 views
0

我有以下方法: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服务器不再执行,我也没有收到任何错误。

可能是什么问题?

回答

1

这很可能是一个权限问题 - 服务帐户可能无法写入您指定的目录,或者它没有权限读取脚本文件本身。

但是,你更大的问题是你的错误处理不够健壮。特别是,如果脚本导致错误,您将永远无法检测到(如您已经发现的那样!!)。

你需要做些什么来解决这个问题,取决于脚本如何报告错误。您通常需要重定向StandardOutputStandardError,并检查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); 
} 
+0

谢谢。是的,我知道错误处理还远远没有完成,我只是想让脚本先执行然后移到那个脚本上。基本上每个人都通过NTLM登录到网站,并且每个人都可以完全控制文件夹/文件,所以我还应该检查什么? – user1468537 2012-07-10 06:46:54

+0

已经尝试了上面的内容,并且当它到达这一行''''''''''''''''''''''''或'string error = scriptProc.StandardError.ReadToEnd();'' – user1468537 2012-07-10 07:28:07

+0

不知道错误是什么正面临的是你在黑暗中拍摄。这就是为什么你需要在尝试修复你的bug之前让你的错误处理得到修复。 ReadToEnd()调用抛出什么错误? – 2012-07-10 07:43:27