HKLM レジストリ ハイブへの書き込み時に Vista で UAC ダイアログをポップアップするには、Win32 レジストリ API を使用しないことを選択しました。代わりに、次のトリックを行います。
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 ビットであり、WOW 互換レイヤーを使用する 32 ビット アプリであるため、REG.EXE コマンドを実行します。:( REG.EXE がコマンド ラインから実行された場合、64 ビット モードで適切に実行されます。32 ビット アプリとして実行された場合、レジストリ リフレクションのためにレジストリ キーが間違った場所に配置されるため、これは重要です。 .
32 ビット アプリからプログラムで 64 ビット アプリを起動し、親の 32 ビット プロセス (つまり、タスク マネージャーの "*" サフィックス) のような WOW64 サブシステムを使用して実行しない方法はありますか?