gpt4 book ai didi

c++ - VS c++ 删除子项不起作用!错误代码 0

转载 作者:行者123 更新时间:2023-11-28 05:17:19 25 4
gpt4 key购买 nike

我目前正在尝试从“Software\Microsoft\Windows\CurrentVersion\Run”中删除一个子项。问题是尽管尝试了所有可能的解决方案,但我的错误代码是独一无二的,唯一的问题尚未得到解答:how to remove program from startup list using c++ .我在 Windows x64 10 上使用 Visual Studio,程序是 Win32 应用程序。

创建 key :

   BOOL registerForLocalStartup(PCWSTR regName, PCWSTR pathToExe, PCWSTR args)
{
HKEY hKey = NULL;
LONG lResult = 0;
BOOL fSuccess = TRUE;
DWORD dwSize;

const size_t count = MAX_PATH * 2;
wchar_t szValue[count] = {};


wcscpy_s(szValue, count, L"\"");
wcscat_s(szValue, count, pathToExe);
wcscat_s(szValue, count, L"\" ");

if (args != NULL)
{
// caller should make sure "args" is quoted if any single argument has a space
// e.g. (L"-name \"Mark Voidale\"");
wcscat_s(szValue, count, args);
}

// For admin HKEY_LOCAL_MACHINE
lResult = RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, NULL, 0, (KEY_WRITE | KEY_READ), NULL, &hKey, NULL);

fSuccess = (lResult == 0);

if (fSuccess)
{
dwSize = (wcslen(szValue) + 1) * 2;
lResult = RegSetValueExW(hKey, regName, 0, REG_SZ, (BYTE*)szValue, dwSize);
fSuccess = (lResult == 0);
}

if (hKey != NULL)
{
RegCloseKey(hKey);
hKey = NULL;
}

return fSuccess;
}

这是我的代码:

bool DeleteValueKey(HKEY hKeyRoot, std::wstring Subkey, std::wstring ValueKey)
{
HKEY hKey = NULL;
bool bReturn = false;

long result = RegOpenKeyEx(hKeyRoot, Subkey.c_str(), 0, KEY_READ | KEY_WRITE | KEY_WOW64_32KEY, &hKey);

wcout << "Result of RegOpenKeyEx: " << result << endl;

if (result == ERROR_SUCCESS)
{
long result2 = RegDeleteKeyEx(hKey, ValueKey.c_str(), KEY_WOW64_32KEY, 0);
wcout << "Result of RegDeleteKeyEx: " << result2 << endl;
if (result2 == ERROR_SUCCESS)
{
bReturn = true;
}
}

if (hKey != NULL) { RegCloseKey(hKey); }

return bReturn;
}

这就是我试图调用的:

bool result = DeleteValueKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", L"test1");

if (result)
{
wcout << "SUCCESS" << endl;
}
else
{
wcout << "FAILURE: "<< GetLastError() << endl;
}*/

输出:

Result of RegOpenKeyEx: 0 
Result of RegDeleteKeyEx: 2
FAILURE: 0

有人有想法吗?我快疯了,无法解决如此明显的问题......

最佳答案

要删除运行中的,您应该使用RegDeleteKeyValue (或 RegDeleteValue 如果您支持 WinXP 和更早版本)。

RegDeleteKeyEx 用于删除整个 key (及其所有值),您不想在此处执行此操作,因为您不拥有 Run key 。

参见 this blog post用于描述注册表各个部分的术语。

关于c++ - VS c++ 删除子项不起作用!错误代码 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42351027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com