我在纯C ++中编写小应用程序。但现在我鼓励奇怪的问题。我想将我的应用程序添加到自动启动但它无法正常工作。我使用此代码访问Registry:
BOOL SetKeyData(HKEY hRootKey, WCHAR *subKey, DWORD dwType, WCHAR *value, LPBYTE data, DWORD cbData)
{
HKEY hKey;
if(RegCreateKeyW(hRootKey, subKey, &hKey) != ERROR_SUCCESS)
return FALSE;
LSTATUS status = RegSetValueExW(hKey, value, 0, dwType, data, cbData);
if(status != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
RegCloseKey(hKey);
return TRUE;
}
起初我认为问题在于我所服务的数据,所以我将WCHAR转换为LPBYTE这样的路径并以这种方式执行此功能:
size_t i;
char *pMBBuffer = (char *)malloc( MAX_PATH );
wcstombs_s(&i, pMBBuffer, MAX_PATH, my_program, MAX_PATH-1 );
SetKeyData(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", REG_SZ, L"zwApplication", (LPBYTE)pMBBuffer, i))
我收到状态码ERROR_ACCESS_DENIED。也许问题是Windows 7中的策略,但我认为我可以完全访问HKEY_LOCAL_MACHINE中的所有内容。如何解决这个问题?
答案 0 :(得分:2)
写入HKEY_LOCAL_MACHINE要求您的应用以提升的权限运行。这意味着您的应用需要在manifest file中设置此内容。
如果没有这个,您只能从HKEY_LOCAL_MACHINE写入HKEY_CURRENT_USER或读取 - 但是对于您的自动启动要求,这样可以正常工作。