[英]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;
}
}
任务管理器:
您显然正在为 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.