Чтобы открыть диалоговое окно UAC в Vista при записи в куст реестра HKLM, мы предпочитаем не использовать Win32 Registry API, так как при отсутствии разрешений 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-битного процесса (то есть суффикса "*" в диспетчере задач)