32ビットコードから64ビットとしてWindowsプロセスを起動する方法

StackOverflow https://stackoverflow.com/questions/162309

  •  03-07-2019
  •  | 
  •  

質問

HKLMレジストリハイブへの書き込み時にVistaでUACダイアログを表示するには、Win32レジストリ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ビットであることに加えて正常に動作し、WOW互換性レイヤーを使用する32ビットアプリのようにREG.EXEコマンドを実行します。 :( REG.EXEがコマンドラインから実行される場合、64ビットモードで適切に実行されます。32ビットアプリとして実行される場合、レジストリキーはレジストリリフレクション

32ビットアプリからプログラムで64ビットアプリを起動し、その親32ビットプロセスのようなWOW64サブシステムを使用して実行しないようにする方法はありますか(つまり、タスク内の" *"サフィックスマネージャー)?

役に立ちましたか?

解決

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

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

こちらが見つかりました)

他のヒント

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

この関数を実際に別のプログラムまたはCOMオブジェクトに組み込み、プログラムにマニフェストをマークするか、 COM標高モニカー

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

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top