Я написал программу на Visual C ++, которая проверяет конкретное значение reg_expand_sz в реестре на наличие изменений. Значением по умолчанию является% SystemRoot% \ System32 \ NOTEPAD.EXE. Если значение изменилось, программа вернет его к данным по умолчанию. Ключи, которые я изменяю, являются общими или отражаются в зависимости от версии Windows, поэтому не имеет значения, какое представление реестра (32-разрядное или 64-разрядное) я изменяю, так как ключи будут синхронизированы.
Моя проблема заключается в том, что если я использую 64-разрядную версию Windows и использую 32-разрядную версию программы, измените данные значения на% SystemRoot% \ System32 \ NOTEPAD.EXE из-за Перенаправление реестра, данные вместо этого будут сохранены как% SystemRoot% \ SysWOW64 \ Notepad.exe. Это не правильные данные по умолчанию, хотя. Если я скомпилирую программу в 64-битной версии, она будет работать как положено. Я бы предпочел, однако, если это возможно, иметь одну 32-разрядную версию, которая могла бы сбрасывать значения по умолчанию независимо от того, является ли ОС 32-разрядной или 64-разрядной.
Кто-нибудь знает способ отключения этого преобразования System32 в SysWOW64 в значениях reg_sz / reg_expand_sz или знает другой метод, который я могу использовать для достижения этой задачи? Я мог бы выписать файл реестра и использовать system () для выполнения 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);
Любая помощь будет оценена.