Process.Start() не создает новый процесс под тем же пользователем

У меня всегда было впечатление, что когда вы запускаете процесс как (domain\user) mydomain\myuser, при использовании Process.Start() он запускает этот новый процесс, используя те же учетные данные - mydomain\myuser.

Проблема, с которой я сталкиваюсь, заключается в том, что мой вызов Process.Start(), похоже, создает процесс под учетной записью SYSTEM, что вызывает у меня проблемы с разрешениями в запущенном процессе (который должен работать под учетной записью администратора из-за работы, которую он выполняет). Если это что-то изменит, я запускаю этот процесс (специально созданный исполняемый файл) из из установщика Windows.

Какие-либо предложения? Я читал о групповых политиках Windows (возможно), влияющих на это, но, если честно, я ничего не понял.

РЕДАКТИРОВАТЬ: небольшой фрагмент:

Где exename и commandLine — параметры тела этого метода:

ProcessStartInfo procInfo = new ProcessStartInfo(exeName, commandLine);
procInfo.WorkingDirectory = workingDirectory;
procInfo.UseShellExecute = false;
procInfo.CreateNoWindow = true;
Process process = Process.Start(procInfo);
Process.WaitForExit();
return process.ExitCode;

person Dave    schedule 03.12.2010    source источник
comment
Вы уверены, что исходный код не работает как System?   -  person CodesInChaos    schedule 03.12.2010
comment
Ага, на 100% уверен. Я проверил это двумя способами: один с помощью сгенерированного нами установочного exe-файла (и убедился, что пользователь, под которым он работает, - это я через диспетчер задач). Кроме того, запустив сгенерированный нами MSI, используя msiexec из командной строки и заставив его работать с правами администратора под моим именем пользователя. После запуска exe-файла process.start() он показывает, что в обоих случаях он запускается «СИСТЕМОЙ».   -  person Dave    schedule 03.12.2010


Ответы (2)


Либо установите для procInfo.UseShellExecute значение true, либо выполните cmd как процесс с вашим exe-файлом в качестве параметра команды cmd. Если для параметра UseShellExecute задано значение false, возникает множество интересных побочных эффектов: UseShellExecute

person Kell    schedule 03.12.2010
comment
Я попробую идею CMD и свяжусь с вами, спасибо за предложение. - person Dave; 03.12.2010
comment
Я также сталкиваюсь с этой проблемой. Я уже вызываю cmd с моим exe в качестве параметра, и если я вообще хочу вести журнал ошибок (используя RedirectStandardError, я не могу установить UseShellExecute в true. Что мне делать дальше? - person cidthecoatrack; 10.08.2015

Ваше впечатление верно. Process.Start() всегда будет запускать новый процесс с учетными данными текущего пользователя, если вы не предоставите альтернативные учетные данные в ProcessStartInfo или не используете одну из перегрузок, которые принимают учетные данные.

Должна быть еще одна проблема - поделитесь фрагментом своего кода.

ОБНОВЛЕНИЕ

В ПОРЯДКЕ! Вы ничего не упомянули об установщике. Все установщики MSI будут работать в системе, поскольку они будут запускаться с помощью «Установщика Windows», который вы можете проверить, и они запускаются в SYSTEM.

person Aliostad    schedule 03.12.2010
comment
Я добавил фрагмент из моего метода, чтобы запустить процесс, хотя в нем нет ничего особенного (и я не параметризовал никаких учетных данных). Спасибо за вклад, мне было бы интересно услышать любые другие мысли, которые у вас есть. - person Dave; 03.12.2010
comment
Части проекта основаны на Интернете, но установщик и исполняемый файл представляют собой обычный код .Net. - person Dave; 03.12.2010
comment
Я сказал совершенно ясно (до каких-либо правок) из установщика Windows. Кроме того, setup.exe / MSI может запускаться под любой учетной записью. - person Dave; 03.12.2010
comment
Так что я, должно быть, пропустил это - это то, что вы хотите выделить. Я вижу, что вы вернули свои 10 баллов, и это нормально, но, как я еще раз сказал, часть установки MSI всегда выполняется службой установки MSI. Вы можете проверить это с помощью различных инструментов, включая обозреватель процессов, где ваш процесс отображается под msiexec.exe, а также всякий раз, когда вы запускаете программу установки, вы видите, что процесс msiexec.exe запущен, а после завершения он исчезает. - person Aliostad; 03.12.2010