CreateProcess для запуска от имени администратора

В моем приложении Win32 у меня есть возможность запускать дочерние процессы с перенаправленным вводом и выводом в анонимные каналы, которые я создаю и управляю - все это работает с функцией CreateProcess(). Однако на Win7 (и, вероятно, Vista), если этот процесс требуется для запуска с правами администратора, это не удается. Итак, я ищу способ сделать эквивалентную команду "запуск от имени администратора" в проводнике, которая вызовет стандартное приглашение UAC и затем создаст процесс с повышенными разрешениями. Я видел статьи, в которых говорится об использовании опции "runas" для ShellExecute, но, как я понимаю, у меня нет элемента управления, который мне нужен, чтобы перенаправлять ввод и вывод std в мои каналы. Какие-либо предложения?

1 ответ

Если вы поместите манифест в дочернее приложение, и если вы используете ShellExecute для запуска, оно будет использовать манифест и появится приглашение UAC. (Я предпочитаю это подходу "runas" в большинстве случаев.) Это может позволить вам запустить приложение так, как вам нравится, не беспокоясь об UAC, и получить повышение от манифеста.

Однако у вас могут возникнуть проблемы, если часть "управление", на которую вы ссылаетесь, связана с приложением с более низкими привилегиями, которое взаимодействует с приложением с повышенными правами. ОАК запрещает это.

Должна быть возможность установить переменную среды __COMPAT_LAYER к RunAsAdminперед вызовом CreateProcess, который сообщает Windows, что нужно просто запустить запуск от имени администратора с помощью флагов совместимости. Переменную среды можно удалить после запуска процесса.

Другие вопросы по тегам