Реализация runas на C#

Как я могу реализовать runas/noprofile/netonly/user:@ с помощью С#.

В System.Diagnostics.ProcessStartInfo есть такие поля, как пользователь, домен, пароль, глагол (где мы можем использовать runas), но как установить netonly. При использовании Cmd ему не нужен токен, но при использовании диагностики запрашивается токен, из-за которого возникает ошибка безопасности "{"База данных безопасности на сервере не имеет учетной записи компьютера для этого доверительного отношения рабочей станции"}", поскольку моя система не является доверенным партнером в этом домене. В Cmd такой проблемы не возникает. Я хочу использовать пользовательский интерфейс для ввода информации о пользователе. Поскольку моя система не является доверенным партнером, я не могу использовать олицетворение.


person user1675935    schedule 01.10.2012    source источник
comment
Несколько лет назад я написал небольшой класс олицетворения, который может быть полезен для ваших требований.   -  person Uwe Keim    schedule 01.10.2012
comment
Чтобы использовать олицетворение, ПК должен быть доверенным партнером домена, а моя система не является доверенной, поэтому я не могу использовать олицетворение. Такое же исключение возникает при использовании олицетворения.   -  person user1675935    schedule 01.10.2012


Ответы (1)


Вы попытались запустить новый процесс с помощью команды runas с помощью ProcessStartInfo. Но это не то же самое, что выполнение процесса runas из командной строки.

Таким образом, простой способ воспроизвести то, что вы делаете в командной строке, — запустить программу runas, передав все параметры, точно так же, как вы делаете это из командной строки.

Process.Start("runas.exe", "/noprofile /netonly ......");

Я не понимаю нюансов того, что вы пытаетесь сделать. Однако, если запуск через cmd делает именно то, что вам нужно, вы можете сделать именно это:

Process.Start("cmd.exe", "/c runas /noprofile /netonly ......");
person David Heffernan    schedule 01.10.2012
comment
Process.Start(runas.exe, /noprofile/netonly/user: + Application.StartupPath + имя файла); Всплывающее окно Cmd появляется и уходит без ввода (пароля). - person user1675935; 01.10.2012
comment
Возможно, вам придется заключить путь в кавычки, если он содержит пробелы. - person David Heffernan; 01.10.2012
comment
Вы также можете попробовать перегрузку ProcessStartInfo и установить для UseShellExecute значение false. Хотя я не вижу, как это изменит ситуацию. - person David Heffernan; 01.10.2012
comment
Я тоже пробовал это, это не будет иметь значения. Я установил глагол как «runas» и loadProfile как ложный и указав идентификатор пользователя и пароль, shellExecute как ложный, выдается то же исключение, что и раньше (ненадежный партнер), т. е. процесс используя токен пользователя, в то время как cmd не использует токен. - person user1675935; 01.10.2012
comment
Я установил глагол как «runas». Почему вы это сделали? В любом случае, вы заключили путь в кавычки? Может сделать для нас диагностику и сообщить, что оценивает "/noprofile /netonly /user: " + Application.StartupPath + filename". - person David Heffernan; 01.10.2012
comment
stackoverflow.com/questions/12448972/ - person user1675935; 01.10.2012
comment
при запуске программы из cmd как c:/›runas/noprofile/netonly/user:‹user›@‹domain› ‹program› затем cmd запросит у вас пароль, и программа запустится как пользователь указанного домена, т.е. иметь доступ ко всем службам домена. когда мы олицетворяем (загружаем профиль), токен безопасности назначается этому контексту, и для получения этого токена ваш компьютер должен быть в списках доверенных компьютеров для этого домена (поскольку мой компьютер не находится в списке доверенных, я не могу получить токен) . При использовании команды cmd токен не требуется, и программа будет работать так, как если бы она работала на том же компьютере домена. - person user1675935; 01.10.2012
comment
Я не понимаю тут нюансов. Если прогон cmd.exe делает работу, то сделайте именно это. Process.Start("cmd.exe", "/c runas /noprofile /netonly ......"); - person David Heffernan; 01.10.2012
comment
Это имеет тот же эффект, что и использование runas.exe вместо cmd.exe, то есть будет запрашиваться пароль, но экран не будет удерживаться, поэтому пользователь не может указать пароль указанного пользователя. - person user1675935; 03.10.2012