Можно ли работать от имени администратора только через код - PullRequest
2 голосов
/ 21 апреля 2011

ОС: Windows Язык: C

У меня есть такое требование, как, я не должен изменять манифест exe или свойства файла exe, чтобы запускать его от имени администратора.Есть ли шанс выполнить мое требование с помощью api createprocess / createprocessasuser?Это можно сделать через shellexecute api, однако мне нужно создать свой процесс в приостановленном состоянии.это может быть сделано только с помощью createprocess или createprocessasuser api.Буду признателен, если кто-нибудь поможет мне запустить программу в качестве администратора через эти API.

Ответы [ 3 ]

1 голос
/ 09 мая 2011

Я думаю, тебе не повезло.ShellExecute запустит второе приложение с повышенными правами либо потому, что оно имеет манифест, либо потому, что вы используете глагол runas.CreateProcess не будет.

Возможно, вы можете использовать CreateProcess для запуска приостановленного второго приложения, а затем использовать ShellExecute для запуска повышенного третьего приложения, которое фактически выполняет привилегированное действие?В качестве альтернативы вы можете запустить весь набор приложений с повышенными правами или переместить функциональность в службу, не связанную с UAC.

1 голос
/ 09 мая 2011

Я думаю, что самым простым решением было бы перенаправить процесс, который вы пытаетесь запустить через runas /user:administrator "yourprocess.exe" или предоставить строковый литерал runas во второй параметр ShellExecute. Кажется, это нелегкая недокументированная особенность.

ShellExecute(
    NULL,
    _T("runas"),
    _T("notepad.exe"),
    _T(""),    // params
    NULL,        // directory
    SW_SHOW
);
0 голосов
/ 23 апреля 2011

Это невозможно, потому что это нарушит всю цель такого ограничения!

Разрешение на это, даже для "благих намерений", по-прежнему представляет собой нарушение безопасности.

Цитата О, давай. Две вещи: кажется, вы полностью недооцениваете плохих парней (многие из них достаточно умны и не задают такой вопрос). И также только потому, что кто-то хочет делать «хакерские» вещи, не означает, что это для злых целей. - STATUS_ACCESS_DENIED

...