10

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 サブシステムを使用して実行しない方法はありますか?

4

4 に答える 4

12

これを試してください(32ビットプロセスから):

> %WINDIR%\sysnative\reg.exe query ...

ここで見つかりました)。

于 2010-05-10T10:40:14.493 に答える
9

32 ビットまたは 64 ビットのネイティブ (アンマネージ) プログラムが実行されるかどうかは、実行可能ファイルのみに依存します。の 2 つのコピーがreg.exeC:\Windows\System32 (64 ビット) と C:\Windows\SysWOW64 (32 ビット) にあります。パスを指定しないため、PATH環境変数で最初に表示されるものを取得します。これは、32 ビット プロセスの 32 ビット バージョンです。

実際には、この関数を別のプログラムまたは COM オブジェクトに分解し、そのプログラムをマニフェストでマークするか、COM 昇格モニカーを使用して COM オブジェクトを起動する必要があります。

于 2008-10-02T13:49:30.637 に答える
2

レジストリを更新するための小さな「ヘルパー」アプリケーションを作成することを検討しましたか? それを 64 ビットにコンパイルし、管理者権限が必要であることを示すマニフェストを含めると、両方のベースがカバーされます。

実行しているOSの「ビット数」を検出するAPIがあるため、おそらく、RegistryUpdate32.exeとRegistryUpdate64.exeの両方をコンパイルして、関連するものを呼び出すことができます。

于 2008-10-02T13:42:33.510 に答える
1

私が自分自身の解決策として行ったことの 1 つは、リダイレクトを無効にする PInvoke です。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365744(v=vs.85).aspx

いつでもオンに戻すことができます。

于 2011-12-28T23:06:14.303 に答える