2013-07-28 1 views
0

Я использую C# с .NET 3.5Получения зарегистрированного имени пользователя, чтобы активировать процесс с

Моей целью здесь, чтобы принять вошедшими в имени пользователя и просто начать процесс под этим именем пользователя. Обычно простой способ Process.Start(pathToProgram) поможет здесь, но проблема в том, что я вызываю эту строку из класса установщика, то есть msiexec в настоящее время работает, а имя пользователя, которое я получаю, является SYSTEM вместо фактического пользователя, который в настоящее время вошел в систему.

Конечно, Environment.UserName также возвращает «СИСТЕМА» вместо зарегистрированного пользователя.

Как я могу запустить процесс как зарегистрированный пользователь, а не как пользователь SYSTEM?

+0

Не удалось проверить сейчас, но вы пытались вызвать 'Environment.GetEnvironmentVariable (« USERNAME »);'? Он отличается от Environment.UserName в вашем конкретном контексте? – Steve

+0

Нет такой вещи, как «зарегистрированный пользователь». Помните, что Windows - многопользовательская операционная система. Возможно, что ни один пользователь не зарегистрировался, один пользователь, несколько пользователей, несколько * удаленных * пользователей и любая комбинация из вышеперечисленного. Поэтому вам нужно будет более четко определить, что вы подразумеваете под «зарегистрированным пользователем» и как вы хотите обрабатывать эти другие случаи. –

+0

зарегистрированный пользователь - это имя пользователя, которое ввело его имя и пароль на экране входа в Windows. –

ответ

0

Я думаю, что, когда вы звоните Environment.UserName вы получаете значение для пользователя олицетворенного по текущий процесс, а если вы вызываете Environment.GetEnvironmentVariable("USERNAME"), вы получаете имя пользователя, который запускает процесс, и в этот момент процесс не запускается, а coure еще не выдал себя за другого пользователя.

Однако это только сырая мысль, которая, кажется, работает для вопроса OP, но я все еще ищу некоторые справочные материалы для подтверждения моего утверждения.
Я приветствую любого, кто лучше понимает этот факт и объясняет это лучше меня

+0

Возможно, вы хотите попробовать получить правильный ответ для последующего вопроса. 've got: http://stackoverflow.com/questions/17908993/starting-a-process-with-a-user-name-and-password –

0

Вы можете получить имя пользователя для текущего вошедшего в систему пользователя, как это -

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

От SO post -

Process p = new Process(); 
p.StartInfo.FileName = "C:\SetupVM.bat"; 
p.StartInfo.UserName = userName; 
p.StartInfo.Password = "AdminPassword"; 
p.Start(); 
p.WaitForExit(); 
+0

Как я могу использовать его для запуска процесса с информацией, которую я получаю? –

+0

'Process.Start (pathToProgram' запустит процесс только для текущего входа в систему, не так ли? –

+0

Он запустит процесс как пользователь, который запустил эту команду. Поскольку он находится во время установки программы, пользователь запускает команда была SYSTEM, а не зарегистрированным пользователем. –