2012-03-07 3 views
1

Visual C++でレジストリの特定のreg_expand_sz値をチェックして変更を加えるプログラムを作成しました。既定値は%SystemRoot%\ System32 \ NOTEPAD.EXEです。値が変更されると、プログラムはデフォルト値に戻します。私が変更しているキーは、Windowsのバージョンによって共有または反映されるため、キーが同期されると、どのレジストリビュー(32ビットまたは64ビット)を変更しても問題ありません。Visual C++には、System32をsyswow64に変換するのからレジストリリダイレクトを停止する方法がありますか?

私が抱えている問題は、私が64ビットバージョンのWindowsを使用していて、32ビットバージョンのプログラムを使用して値のデータを%SystemRoot%\ System32 \ NOTEPAD.EXEに変更する場合ですレジストリのリダイレクトにデータが代わりに%SystemRoot%\ SysWOW64 \ Notepad.exeとして保存されます。しかしこれは正しいデフォルトデータではありません。 64ビットでプログラムをコンパイルすると、期待どおりに動作します。しかし、可能であれば、OSが32ビットか64ビットかにかかわらずデフォルトをリセットできる単一の32ビットバージョンを使用することをお勧めします。

Reg_sz/reg_expand_sz値でSystem32からSysWOW64へのこの変換を無効にする方法や、このタスクを達成するために使用できる別の方法を知っている人はいますか?私はレジストリファイルを書き出し、reg()やregedit()を実行してimportするためにsystem()を使うことができますが、プログラムそのものの範囲内ですべてをやります。以下は

私の現在のコードです:

HKEY hKey; 
DWORD size; 
LONG lResults; 

wchar_t szVdata[] = L"%SystemRoot%\\System32\\NOTEPAD.EXE %1"; 

size = sizeof(szVdata); 

lResults = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Classes\\batfile\\shell\\edit\\command",0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKey); 

if(lResults == ERROR_SUCCESS) 
    RegSetValueExW (hKey, L"",0, REG_EXPAND_SZ, (PBYTE)szVdata, size); 

RegCloseKey (hKey); 

任意の助けをいただければ幸いです。

+0

これはレジストリリダイレクトではなく、ファイルシステムリダイレクトです。これはコードを見ることなくほとんど意味をなさない。 –

+0

十分に公正です。コード例を追加しました。ありがとう –

+0

ページの一番下:http://msdn.microsoft.com/en-us/library/aa384232%28v=vs.85%29.aspx –

答えて

0

お試しください%SystemRoot%\\SysNative\\

+0

残念ながら、レジストリの%SystemRoot%\ SysNative \ NOTEPAD.EXE%1に設定するだけです。 –

+0

@ジョン:それは機能しませんか? –

+0

いいえ、残念ながら働いていません。 –

関連する問題