Ответ 1
Вы должны использовать ShellExecute
. ShellExecute - это единственный API, который знает, как запустить Consent.exe
для повышения.
Пример (.NET) Исходный код
В С# способ, которым вы вызываете ShellExecute
, - это использовать Process.Start
вместе с UseShellExecute = true
:
private void button1_Click(object sender, EventArgs e)
{
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
info.UseShellExecute = true;
info.Verb = "runas";
Process.Start(info);
}
Если вы хотите быть хорошим разработчиком, вы можете поймать, когда пользователь нажал Нет:
private void button1_Click(object sender, EventArgs e)
{
const int ERROR_CANCELLED = 1223; //The operation was canceled by the user.
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
info.UseShellExecute = true;
info.Verb = "runas";
try
{
Process.Start(info);
}
catch (Win32Exception ex)
{
if (ex.NativeErrorCode == ERROR_CANCELLED)
MessageBox.Show("Why you no select Yes?");
else
throw;
}
}
Просмотр бонусов
- UAC - Что. Как. Почему.. Архитектура UAC, объясняя, что
CreateProcess
не может выполнять возвышение, только создает процесс.ShellExecute
- это тот, кто знает, как запустить Consent.exe, а Consent.exe - тот, кто проверяет параметры групповой политики.
Примечание. Любой код, выпущенный в общественное достояние. Не требуется атрибуция.