Process.Start()抛出“拒绝访问”错误

时间:2011-12-17 22:39:23

标签: c# redirect process

当我执行进程并尝试重定向输出/错误时,我收到以下错误:

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();
}

3 个答案:

答案 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”)才能正常运行。此外,如果它是批处理文件,则它不能为空,否则会引发异常。