Visual c++ 在VisualC++中,有没有一种方法可以阻止注册表重定向从转换系统32到SySWOW64? 我在VisualC++中编写了一个程序,它检查注册表中的特定ReGuExpAdvsSz值以进行更改。默认值为%SystemRoot%\System32\NOTEPAD.EXE。如果该值发生更改,程序会将其重置回默认数据。我正在修改的键是共享的或反映的,具体取决于Windows的版本,因此我修改的是32位还是64位注册表视图并不重要,因为这些键将同步

Visual c++ 在VisualC++中,有没有一种方法可以阻止注册表重定向从转换系统32到SySWOW64? 我在VisualC++中编写了一个程序,它检查注册表中的特定ReGuExpAdvsSz值以进行更改。默认值为%SystemRoot%\System32\NOTEPAD.EXE。如果该值发生更改,程序会将其重置回默认数据。我正在修改的键是共享的或反映的,具体取决于Windows的版本,因此我修改的是32位还是64位注册表视图并不重要,因为这些键将同步,visual-c++,registry,64-bit,Visual C++,Registry,64 Bit,我遇到的问题是,如果我使用64位版本的Windows并使用32位版本的程序将值的数据更改为%SystemRoot%\System32\NOTEPAD.EXE,由于注册表重定向,数据将改为保存为%SystemRoot%\SysWOW64\NOTEPAD.EXE。但这不是正确的默认数据。如果我用64位编译程序,它就可以正常工作。不过,如果可能的话,我宁愿使用一个32位版本,无论操作系统是32位还是64位,都可以重置默认值 是否有人知道在reg_sz/reg_expand_sz值中禁用System32

我遇到的问题是,如果我使用64位版本的Windows并使用32位版本的程序将值的数据更改为%SystemRoot%\System32\NOTEPAD.EXE,由于注册表重定向,数据将改为保存为%SystemRoot%\SysWOW64\NOTEPAD.EXE。但这不是正确的默认数据。如果我用64位编译程序,它就可以正常工作。不过,如果可能的话,我宁愿使用一个32位版本,无论操作系统是32位还是64位,都可以重置默认值

是否有人知道在reg_sz/reg_expand_sz值中禁用System32到SysWOW64转换的方法,或者知道我可以使用的其他方法来完成此任务?我可以编写一个注册表文件并使用系统来执行reg或regedit并导入它,但我更愿意在程序本身的范围内完成所有工作

以下是我目前的代码:

    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);

任何帮助都将不胜感激。

请尝试%SystemRoot%\\SysNative\\

这是文件系统重定向,而不是注册表重定向。如果不看代码,这就没什么意义了。这很公平。我添加了一个代码示例。谢谢页面底部:是的,我知道它为什么这么做。我正在试图找到一种绕过它的方法。不幸的是,在注册表中将它设置为%SystemRoot%\SysNative\NOTEPAD.EXE%1。