2015-03-25 11 views
1

У меня есть приложение, которое использует текущие учетные данные пользователя для подключения к серверу и выполнения некоторых тестов производительности.Запуск процесса с диалогом «Запуск от имени»

По многочисленным причинам олицетворение не является жизнеспособным вариантом. Вместо этого я хотел бы дать пользователю кнопку «Switch User», которая перезапускает процесс, но показывает диалог Run As....

Я не вижу никакой опции на Process.Start() или ассоциированном ProcessStartInfo. Существует возможность указать имя пользователя/пароль, которые я захватил, но я бы предпочел не участвовать в этом процессе и просто позволить окнам обрабатывать его. Просто использование глагола runas просто вызывает повышение, но если текущий пользователь является локальным администратором, нет возможности указать другое имя пользователя.

Есть ли способ сделать это? Я знаю, что есть командная строка runas.exe, но это не очень хорошо.

+0

Вы пробовали 'RunAsUser' глагол вместо этого? – Jester

+0

@Jester Я нашел этот глагол, задав этот вопрос. К сожалению, когда это используется, 'Process.Start' возвращает' null' вместо идентификатора процесса (он возвращается, когда диалог виден, перед запуском процесса). Кажется, что диалог размещен текущим процессом до тех пор, пока он не будет успешно завершен. Это означает, что нет способа проверить запуск нового процесса, и если я скоро закрою старый, он удалит диалог. На данный момент я использую 'RunAsUser' и просто полагаюсь на пользователя, чтобы закрыть старый процесс, но это настоящий kludge. Я должен был добавить это к моему вопросу. Благодарю. – Basic

ответ

0

Вы посмотрели документацию process.start()? Никогда не пробовал это, но похоже, что они у вас покрыты:

public static Process Start(
    string fileName, 
    string userName, 
    SecureString password, 
    string domain 
) 

https://msdn.microsoft.com/en-us/library/sxf2saat%28v=vs.110%29.aspx

+0

К сожалению, это означает, что мне нужно самому записать имя пользователя и пароль со всеми связанными с ним проблемами безопасности (например, убедиться, что строка пароля не может быть восстановлена ​​из памяти). Я бы предпочел полностью устранить проблему и позволить ОС обрабатывать ее, если это возможно. Тем не менее, спасибо за предложение – Basic

+0

Несомненно, вы должны ввести учетные данные пользователя. Не знаете, как бы вы избежали бит памяти, поскольку большинство продуктов безопасности работают так, но предложение, которое вы, вероятно, не можете использовать, было бы зашифровать его, как только оно будет введено, отправить кредиты на ваш сервер и расшифровать его на своем сервере +, вы не отправляете файл cleartext pwd по сети. Большая картина здесь заключается в том, что если ваша память не защищена, у вас, вероятно, гораздо больше проблем, чем учетные данные, используемые для запроса «тестов производительности». И снова для всех, кого я знаю, вы работаете над DoD и должны придерживаться этого стека безопасности. – RandomUs1r

+0

Я не делаю этого по сети (auth). Я хочу подражать пользователю (сдвигу), щелкнув правой кнопкой мыши исполняемый файл и выбрав «Запустить как». Уже существует класс «SecureString» для обработки паролей, но это боль для работы (см. [Страница MDSN, особенно примечания] (https://msdn.microsoft.com/en-us/library/system.security.securestring % 28v = vs.110% 29.aspx)). Ничто так высоко, как DoD, но мы иногда коснемся секретной информации, поэтому наличие в текстовом виде паролей в памяти - это монументальное обязательство с точки зрения аудита/анализа рисков/выхода для повторной реализации функциональных возможностей, которые уже существуют в ОС – Basic

Смежные вопросы