Если вы не возражаете против UAC (но я боюсь, что вы делаете это), то вы можете просто сделать, например:
HINSTANCE hInst = ShellExecuteW (NULL, L"runas",
L"notepad.exe", NULL, NULL, SW_SHOWDEFAULT);
Проверьте документацию для значений, возвращаемых в hInst
. Извините, пример написан на C ++, но я уверен, что вы можете перевести.
Если вы хотите обойти UAC, то вы действительно должны запустить свое приложение из службы, чтобы оно работало с повышенными правами. Пример кода здесь , опять же на C ++, извините, и он мог бы немного доработать, но он, безусловно, работает. Я предполагаю, что вы хотите запустить процесс в контексте текущего пользователя, как этот код. Пожалуйста, проголосуйте за этот ответ (или этот, или оба), если это поможет U.
Редактировать: (поскольку ОП все еще явно борется с этим).
Знаете что? Я мог бы дать вам главу и стих о том, как решить эту проблему , но я не собираюсь , потому что вы просто создадите одну большую, огромную лазейку безопасности, когда ваше программное обеспечение будет установлено. Это тоже разрешимо, но вы бы на самом деле беспокоились?
В любом случае, поставьте себя на место ваших пользователей на мгновение. Как вы думаете, они будут чувствовать, когда программа начнет делать то, что обычно может быть сделано только программой, выполняющейся от имени администратора, без предварительного отображения ожидаемого приглашения UAC? Если бы это был я, я бы взбесился.
Так что нет, просто используйте трюк ShellExecute
, который я сначала рекомендовал, и оставьте его на этом. Это более чем достаточно.