0

私は次の方法を持っています:

 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 サーバーに配置した後は実行されなくなり、エラーも発生しません。

何が問題になる可能性がありますか?

4

1 に答える 1

1

ほとんどの場合、権限の問題です。サービス アカウントが指定したディレクトリに書き込めないか、スクリプト ファイル自体を読み取る権限がありません。

ただし、より大きな問題は、エラー処理が十分に堅牢ではないことです。具体的には、スクリプトがエラーを引き起こした場合、それを検出することはありません (ご存じのように!!)。

これを修正するために何をする必要があるかは、スクリプトがエラーを報告する方法によって少し異なります。通常、 StandardOutputStandardErrorをリダイレクトし、終了コードを確認します。

以下は、考えられる実装の1 つの大まかな概要です。スクリプトと環境に合わせて調整する必要があります。

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);
}
于 2012-07-09T14:53:32.950 に答える