0

我用纯 C++ 编写小应用程序。但现在我鼓励奇怪的问题。我想将我的应用程序添加到自动启动,但它不起作用。我使用此代码访问注册表:

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 中的所有内容。如何解决这个问题呢?

4

1 回答 1

2

写入 HKEY_LOCAL_MACHINE 要求您的应用程序以提升的权限运行。这意味着您的应用需要在其清单文件中进行设置。

如果没有这个,您只能写入 HKEY_CURRENT_USER,或从 HKEY_LOCAL_MACHINE读取- 但对于您的自动启动要求,这也可以正常工作。

于 2012-05-20T08:42:06.647 回答