繁体   English   中英

为什么添加到 windows 启动 function 不起作用?

[英]Why doesn't the add to windows startup function work?

在任务管理器自动运行禁用状态。 这个 function 的错误在哪里?

void AutoRun()
{
    char arr[MAX_PATH] = { };
    GetModuleFileName(NULL, (LPWSTR)arr, MAX_PATH);
    
    HKEY hKey;

    if (RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, NULL) == ERROR_SUCCESS)
    {
        if (RegSetValueEx(hKey, L"svchost", NULL, REG_SZ, (LPBYTE)arr, (sizeof(arr) + 1)) == ERROR_SUCCESS)
        {
            RegCloseKey(hKey);
        }
        return;
    }
}

任务管理器:

1

您显然正在为 Unicode 进行编译,但您使用的是char[]数组而不是wchar_t[]数组。 您需要使用后者。

您还将错误的长度值传递给RegSetValueEx() 您只需要指定字符串的字节长度,包括 null 终止符。 不是整个数组的字节长度(实际上,您指定的甚至更多)。

此外,如果RegSetValueEx()失败,您将泄漏HKEY

试试这个:

void AutoRun()
{
    wchar_t arr[MAX_PATH] = { };
    GetModuleFileName(NULL, arr, MAX_PATH);
    
    HKEY hKey;

    if (RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, NULL, 0, KEY_SET_VALUE, NULL, &hKey, NULL) == ERROR_SUCCESS)
    {
        RegSetValueEx(hKey, L"svchost", NULL, REG_SZ, (LPBYTE)arr, (lstrlen(arr)+1) * sizeof(wchar_t));
        RegCloseKey(hKey);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM