Process.Start () выдает ошибку «Отказано в доступе» - PullRequest
3 голосов
/ 18 декабря 2011

Когда я выполняю процесс и пытаюсь перенаправить вывод / ошибку, я получаю следующую ошибку:

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 ]

3 голосов
/ 18 декабря 2011

Нет веских причин для этого, код еще не дошел до точки, где он будет делать что-то чувствительное к безопасности.Это экологично, что-то на вашей машине мешает.Сначала перезагрузите компьютер, затем отключите антивирус.Если это не поможет, тогда используйте TaskMgr.exe, вкладку «Процессы» и произвольно начинайте убивать процессы, если повезет, вы попадете в злодея.Задайте вопросы о том, как снова получить стабильную работу этой машины на сайте superuser.com

2 голосов
/ 18 декабря 2011

Вы должны убедиться, что у учетной записи, которая выполняет вашу программу, есть права на выполнение программы, которую вы пытаетесь запустить с помощью process.start, и что у учетной записи есть права на создание канала в системе.

Вы пытались удалить redirectOutput? Если без перенаправления вывода вы не получите исключение, это означает, что ваш пользователь не может создать канал, поэтому вы должны предоставить это право пользователю.

1 голос
/ 18 декабря 2011

У этого файла должен быть полный путь к файлу и имя файла, попытка запустить папку приведет к этой ошибке.

string path = "C:\\test.exe";
proc.StartInfo.FileName = path;

Также есть ли у приложения права администратора?

Редактировать: если это пакетный файл, он должен иметь расширение .bat, такое как "batch.bat", чтобы работать правильно. Кроме того, если это командный файл, он не может быть пустым, иначе возникнет исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...