【问题标题】:Why doesn't the add to windows startup function work?为什么添加到 Windows 启动功能不起作用?
【发布时间】:2021-04-01 21:48:36
【问题描述】:

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

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;
    }
}

任务管理器:

【问题讨论】:

    标签: c++ windows g++ registry


    【解决方案1】:

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

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

    另外,如果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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多