Повышение учетных данных пользователя с помощью глагола runasuser - PullRequest
3 голосов
/ 30 марта 2011

Я пытаюсь поднять процесс моего приложения, используя глагол runasuser класса ProcessStartInfo, но каждый раз, когда я запускаю программу, она автоматически завершается.

Вот мой код для основного класса:

    private static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        //Application Events
        Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);

        //Check if the current user is a member of the administrator group
        WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
        bool hasAdministrativeRights = principal.IsInRole(WindowsBuiltInRole.Administrator);

        bool createdNew = false;
        if (hasAdministrativeRights)
            //Creating new mutex for single instance
            using (Mutex mutex = new Mutex(true, "CpELabAppCopier", out createdNew))
            {
                if (createdNew)
                    Application.Run(new MainForm());
                else
                    Application.Exit();
            }
        else
            //Creating new mutex for single instance
            using (Mutex mutex = new Mutex(true, "Elevated_CpELabAppCopier", out createdNew))
            {
                if (createdNew)
                {
                    //Setting the startinfo
                    ProcessStartInfo newProcessInfo = new ProcessStartInfo();
                    newProcessInfo.FileName = Application.ExecutablePath;
                    newProcessInfo.Verb = "runasuser";
                    newProcessInfo.UseShellExecute = true;

                    //Starting new process
                    Process newProcess = new Process();
                    newProcess.StartInfo = newProcessInfo;
                    newProcess.Start();

                    //The Run As dialog box will show and close immediately.
                }
            }
    }

1 Ответ

2 голосов
/ 26 октября 2011

Вы уверены, что хотите "runasuser", а не "runas"?RunAs попытается запустить от имени администратора, где RunAsUser позволит вам запустить процесс как любой.

Если вы действительно хотите «runasuser», проблема, вероятно, заключается в том, что этот глагол запустит имя пользователя / парольдиалог в том же потоке, что и текущий процесс, но не блок для ответа.В этом случае он также возвращает нулевой объект Process, поэтому вы не можете запросить его Respond / MainModule / ..., чтобы увидеть, когда он действительно запускается.

Единственное решение, которое я нашел, это перечислить все окнав текущем процессе, пока вы больше не увидите диалоговое окно с именем пользователя / паролем.Вот пример класса;единственное, что вам может понадобиться / нужно отрегулировать, это задержка на трейлинг 500 мс:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...