当我执行进程并尝试重定向输出/错误时,我收到以下错误:
System.ComponentModel.Win32Exception (0x80004005): Access is denied
at System.Diagnostics.Process.CreatePipe(SafeFileHandle& parentHandle, SafeFileHandle& childHandle, Boolean parentInputs)
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
...
可能有什么不对?这是一个复制品:
string path = "C:\\batch.cmd";
using (Process proc = new Process())
{
bool pathExists = File.Exists(path);
if(!pathExists) throw new ArgumentException("Path doesnt exist");
proc.StartInfo.FileName = path;
proc.StartInfo.WorkingDirectory = workingDir.FullName;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start(); //Exception thrown here
proc.WaitForExit();
}
答案 0 :(得分:3)
没有正当理由让这个失败,代码还没有达到安全敏感的程度。这是环境问题,机器上的东西正在干扰。首先重新启动,然后禁用反恶意软件。如果这没有帮助,那么使用TaskMgr.exe,进程选项卡并随意开始查杀进程,幸运的话,你会击中邪恶的行为者。在superuser.com上提出有关让这台机器再次稳定的问题
答案 1 :(得分:2)
您必须确保执行程序的帐户有权执行您尝试使用process.start启动的程序,并且该帐户有权在系统上创建管道。
您是否尝试删除redirectOutput?如果没有重定向输出你没有得到异常意味着你的用户无法创建管道,所以你必须给用户这个权利。
答案 2 :(得分:1)
这应该具有完整的文件路径和文件名,尝试启动文件夹将导致此错误。
string path = "C:\\test.exe";
proc.StartInfo.FileName = path;
该应用程序是否也具有管理权限?
编辑:如果是批处理文件,则需要使用扩展名.bat(例如“batch.bat”)才能正常运行。此外,如果它是批处理文件,则它不能为空,否则会引发异常。