我在Windows 2008服务器上遇到权限问题。我有一个命令行实用程序,我需要运行它来将一些标准文件转换为CSV文件。这反过来用于将数据导入我的SQL数据库。我能够在我的2003服务器上完成工作,但我的Windows 2008服务器不允许代码运行。下面是代码的淡化版本。基本上在这个例子中我只是试图运行一个简单的命令。但我一直拒绝输出访问。我该如何纠正?
public partial class _Bank : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btn_Click(object sender, EventArgs e)
{
ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe");
processStartInfo.RedirectStandardInput = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.UseShellExecute = false;
processStartInfo.RedirectStandardError = true;
Process process = Process.Start(processStartInfo);
if (process != null)
{
process.StandardInput.WriteLine("dir");
process.StandardInput.Close();
string outputString = process.StandardOutput.ReadToEnd();
Response.Write(outputString);
string error = process.StandardError.ReadToEnd();
Response.Write(error);
}
}
private string ProcessRunner()
{
ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe");
processStartInfo.RedirectStandardInput = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.UseShellExecute = false;
Process process = Process.Start(processStartInfo);
if (process != null)
{
//process.StandardInput.WriteLine("This is a test line");
process.StandardInput.WriteLine("c:\\");
process.StandardInput.WriteLine("This is a test line");
process.StandardInput.Close(); // line added to stop process from hanging on ReadToEnd()
string outputString = process.StandardOutput.ReadToEnd();
Response.Write(outputString);
return outputString;
}
return string.Empty;
}
public static int ExecuteCommand(string Command, int Timeout)
{
int ExitCode;
ProcessStartInfo ProcessInfo;
Process Process;
ProcessInfo = new ProcessStartInfo("cmd.exe", "/C " + Command);
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
Process = Process.Start(ProcessInfo);
Process.WaitForExit(Timeout);
ExitCode = Process.ExitCode;
Process.Close();
return ExitCode;
}
}
答案 0 :(得分:1)
这是在带有App-Pool的asp.net应用程序中运行的。 App-Pool有一个身份(LocalSystem,Network Service等)执行此过程。 确保此用户对您计划访问的文件夹具有必要的权限。
恕我直言:出于安全原因,在Web应用程序中启动另一个进程并非最佳做法,绝不应在Internet Web应用程序上进行。
编辑: 通常,用户名为ASPNET或IWAM_ [Servername](IWAM _... Internet Information Services的内置帐户,用于启动流程外应用程序)。只需授予该用户访问该文件夹的权限。