Чтобы открыть диалоговое окно UAC в Vista при записи в куст реестра HKLM, мы решили не использовать API реестра Win32, так как при отсутствии разрешений Vista нам потребуется перезапустить все наше приложение с правами администратора. Вместо этого мы делаем этот трюк:
ShellExecute(hWnd, "runas" /* display UAC prompt on Vista */, windir + "\\Reg", "add HKLM\\Software\\Company\\KeyName /v valueName /t REG_MULTI_TZ /d ValueData", NULL, SW_HIDE);
Это решение отлично работает, кроме того, что наше приложение 32-битное, и оно выполняет команду REG.EXE, как 32-битное приложение, использующее уровень совместимости WOW! :( Если REG.EXE запускается из командной строки, он правильно запускается в 64-битном режиме. Это важно, потому что, если он запускается как 32-битное приложение, ключи реестра окажутся не в том месте из-за Реестр отражения .
Итак, есть ли способ запустить 64-битное приложение программно из 32-битного приложения и не запускать его с использованием подсистемы WOW64, как его родительский 32-битный процесс (то есть суффикс "*" в диспетчере задач)