我一直在阅读如何通过命令提示符执行此操作。我试过了。成功了。然后我尝试在 C++ 中执行此操作,但失败了。我预计这在过去曾是某个人遇到的问题,但我在其他地方没有找到这个问题和有效的答案。请告诉我以前在 C++ 中问过这个问题并得到有效回答的地方。不是针对 Visual C++。不是针对 C。我在 MS Windows 系统上使用 CodeBlocks。
答案1
只需使用reg.exe
,如何从命令行设置可执行文件的兼容模式?,使用 win32 API 将其转换为 C++,以下代码似乎可以使用 codeblocks 20.03 和 MINGW 4.3.5 gcc 7.3.0(2018 build)运行
#include <Windows.h>
#include <iostream>
int main() {
HKEY hKey = NULL;
LPCTSTR subKey = TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers");
if (RegCreateKeyEx(HKEY_CURRENT_USER, subKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) == ERROR_SUCCESS) {
LPCTSTR valueName = TEXT("C:\\Program Files\\MyApp\\Test.exe");
LPCTSTR valueData = TEXT("WIN7RTM");
if (RegSetValueEx(hKey, valueName, 0, REG_SZ, (LPBYTE)valueData, (lstrlen(valueData) + 1) * sizeof(TCHAR)) == ERROR_SUCCESS) {
std::cout << "String value added successfully.\n";
} else {
std::cout << "Failed to set the string value.\n";
}
RegCloseKey(hKey);
} else {
std::cout << "Failed to create the registry key.\n";
}
return 0;
}
你可以改为HKEY_CURRENT_USER
强制HKEY_LOCAL_MACHINE
整个系统执行,然后只能通过修改注册表来删除它,来源:程序兼容性助手 - 第二部分
有关兼容性值的列表,请参阅以下来源如何控制兼容模式