Начать процесс с администратором прямо в C # - PullRequest
8 голосов
/ 05 ноября 2010

Мне нужно запустить программу командной строки с помощью System.Diagnostics.Process.Start () и запустить ее от имени администратора.

Это действие также будет запускаться запланированным заданием каждый день.

Ответы [ 5 ]

9 голосов
/ 05 ноября 2010

Я просто пытаюсь использовать:

Process p = new Process();
p.StartInfo.Verb = "runas";

, это нормально работает, если я запускаю свою программу от имени администратора, но когда запускается запланированная задача, она не принимает 'runas'в рассмотрении я думаю.

4 голосов
/ 10 ноября 2010

Более безопасный вариант для запуска процесса с логином и паролем - использовать класс SecureString для шифрования пароля. Вот пример кода:

string pass = "yourpass";
string name ="login";
SecureString str;
ProcessStartInfo startInfo = new ProcessStartInfo();
char[] chArray = pass.ToCharArray();
fixed (char* chRef = chArray)
{
    str = new SecureString(chRef, chArray.Length);
}
startInfo.Password = str;
startInfo.UserName = name;
Process.Start(startInfo);

Вы должны разрешить небезопасный код в свойствах вашего проекта.

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

2 голосов
/ 05 ноября 2010

Если вы используете запланированные задачи, вы можете установить пользователя и пароль для запуска задачи.

Используйте учетные данные администратора в задаче, и все будет в порядке.

С Process.Start необходимо предоставить UserName и Password для ProcessStartInfo:

Process p = new Process("pathto.exe");
p.StartInfo.UserName = "Administrator";
p.StartInfo.Password = "password";
p.Start();
1 голос
/ 30 июня 2013

Имейте в виду, что хранение пароля в виде простого текста в программе никогда не является безопасным, если кто-то может просмотреть приложение и посмотреть, что в нем.Использование SecureString для преобразования сохраненного пароля в пароль SecureString не делает его более безопасным, поскольку пароль в виде открытого текста все равно будет присутствовать.

Лучший способ использовать SecureString - передать один символ для преобразования навремя, которое не требует наличия полного незашифрованного пароля в памяти или на жестком диске.После того, как этот символ преобразован, программа должна забыть его, а затем перейти к следующему.

Это можно сделать, я думаю, только путем передачи символов для перевода, поскольку они вводятся пользователем в консоль.,

0 голосов
/ 05 ноября 2010

Я нашел это, мне нужно установить запланированное задание для запуска приложения с самыми высокими привилегиями в общих настройках.

...