我无法通过模拟调用批处理文件(.NET 4.0)
我有一个Web应用程序,它调用驻留在服务器本地文件系统上的测试批处理文件。当我在没有模仿的情况下运行它时运行正常。但是通过模拟,批处理文件不会产生任何输出,也不会返回任何错误。
以下是执行我使用的批处理文件的代码 -
public static bool ExecuteBatchFile(string fileLocationPath, string filePath, string arguments, TextBox textBox)
{
try
{
ProcessStartInfo procStartInfo = new ProcessStartInfo(filePath);
procStartInfo.UseShellExecute = false;
procStartInfo.Arguments = arguments;
procStartInfo.WorkingDirectory = fileLocationPath;
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.RedirectStandardInput = true;
procStartInfo.UserName = "XYZ";
procStartInfo.Domain = "ABC";
System.Security.SecureString pwd = new System.Security.SecureString();
foreach (char c in "PWD")
pwd.AppendChar(c);
procStartInfo.Password = pwd;
procStartInfo.LoadUserProfile = true;
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.OutputDataReceived += delegate(object sender, DataReceivedEventArgs e)
{
textBox.Text += "output rcvd\r\n";
textBox.Text += e.Data;
};
proc.ErrorDataReceived += delegate(object sender, DataReceivedEventArgs e)
{
textBox.Text += "error rcvd\r\n";
textBox.Text += e.Data;
};
proc.Start();
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
proc.WaitForExit();
proc.Close();
return true;
}
catch (Exception e)
{
textBox.Text += e.Message;
return false;
}
}
没有假冒,我可以看到批处理文件的输出。我收到带有批处理文件输出的输出,然后是空的OutputReceived,然后是空的ErrorReceived。
但是假扮,我什么也看不见!没有数据的OutputReceived只有一个事件,没有数据的ErrorReceived有一个事件。
我在Web配置文件中设置了模拟,如下所示:
<identity impersonate="true" userName="ABC\XYZ" password="PWD"/>
答案 0 :(得分:0)
我遇到了与Windows 2003 Server类似的问题,我在IIS中托管的服务正在执行应用程序。
我发现的事情: 1.您必须调整服务权限并将其配置为输出堆栈跟踪(包括.Net放置内置服务的文件夹)。 2.无法通过服务启动加载用户配置文件的应用程序。您可以创建将在不加载配置文件的情况下执行的包装器应用程序,该应用程序可以通过加载用户配置文件来执行应用程序。包装器必须在发布模式下构建,不得调用跟踪功能。 3.在服务变更时你必须 - 在IIS snapp-in中重新启动应用程序池 - 重启网站 - 执行iisreset。