子プロセス起動時に管理者権限での実行を強制する
ShellExecuteExでlpVerb=runasにすれば良いらしい。
#include <windows.h> #include <shellapi.h> #include <cstdio> int main(int, const char**) { SHELLEXECUTEINFO sei = {}; sei.cbSize = sizeof(sei); sei.fMask |= SEE_MASK_WAITFORINPUTIDLE; sei.fMask |= SEE_MASK_FLAG_NO_UI; sei.fMask |= SEE_MASK_NO_CONSOLE; sei.fMask |= SEE_MASK_NOASYNC; sei.fMask |= SEE_MASK_NOCLOSEPROCESS; sei.lpVerb = "runas"; sei.lpFile = "notepad"; sei.nShow = SW_SHOWNORMAL; if(!ShellExecuteEx(&sei)) { return -1; } std::printf("hInstApp = 0x%08llx\n", uintptr_t(sei.hInstApp)); std::printf("hProcess = 0x%08llx\n", uintptr_t(sei.hProcess)); WaitForSingleObject(sei.hProcess, INFINITE); return 0; }
ShellExecuteExってCreateProcessに渡すSTARTUPINFOにあるような子プロセスの標準出力をリダイレクトで拾うにはどうしたらいいんだろうか?