2010-11-19 8 views
7

Я пытаюсь запустить внешнюю проблему с C# с помощью Process.Start, но я сталкиваюсь с проблемами с разрешениями. Когда я обычно открываю командную строку (а не как админ) и запускаю мои команды, они работают нормально, но когда я открываю командную строку через Process.Start, я получаю ошибку записи в каталоге. («Я не могу писать в файле test.log»)
Если я запустил его как администратор через Process.Start, он отлично работает, но я получаю всплывающее окно с правами. У кого-нибудь есть идеи, которые могут помочь мне понять это? Благодаря!Проблема с Process.Start Permissions

Вот код, я использую:

Process proc = new Process(); 
proc.StartInfo.FileName = @"cmd.exe"; 
proc.StartInfo.Arguments = @"/k latex C:\Users\Shane\Documents\test.tex"; 
proc.Start(); 
proc.WaitForExit(); 
+1

Зачем вам нужно обернуть вашу программу через cmd.exe? –

ответ

7

Интересно, будет ли он пытается написать журнал диагностики для текущего рабочего каталога, который вы не можете иметь права доступа для. (Я не знаю, будет ли он наследовать рабочий каталог или быть каталогом, который содержит cmd.exe.) Я предлагаю вам указать рабочий каталог для нового процесса, используя ProcessStartInfo.WorkingDirectory.

(В отличие от этого, я лично считаю его более чистым, чтобы создать новый ProcessStartInfo населенный пункт, который - инициализаторы объектов C# делают это особенно приятным), а затем позвоните Process.Start(ProcessStartInfo), чтобы начать его. В противном случае, похоже, что уже есть процесс, когда еще нет. Просто MHO, хотя и не связанный с проблемой, которую вы изучаете, вероятно.)

+0

Удивительный! Я не понимал, что рабочий каталог может быть другим при запуске этого способа. Я изменил рабочий каталог на файл с моим tex-файлом, и он сработал. Благодаря! –

1

Вместо использования cmd.exe в качестве свойства FileName объекта Process сохраните свои команды в одном пакетном файле, а затем используйте этот файл для выполнения.

Также вы можете указать права администратора, такие как имя пользователя, пароль, домен и т. Д. С помощью свойства StartInfo класса Process. Если вы используете эти свойства, я думаю, что проблема разрешения не наступит. Here вы можете найти дополнительную информацию о свойстве StartInfo.

Надеюсь, что это поможет.