我将测试程序插入注册表的测试程序不起作用。我还没有在Google或本网站上找到解决方案。以管理员身份运行程序后,它立即关闭,寄存器不会被修改。
HKEY hkey;
const char PATH[] = "C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe";
RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
0,
KEY_WRITE,
&hkey);
RegSetValueEx(hkey,
"TestWordPad",
0,
REG_SZ,
(BYTE*)PATH,
strlen(PATH));
RegCloseKey(hkey);
return 0;
我开始调试之后是输出:
'ConsoleApplication1.exe'(Win32):已加载 'C:\ Users \用户的Jakub \桌面\ ConsoleApplication1 \调试\ ConsoleApplication1.exe中'。 符号已加载。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ ntdll.dll中'。无法找到或打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ kernel32.dll中'。无法找到或打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ KernelBase.dll'。无法找到或打开PDB 文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ ADVAPI32.DLL'。无法找到或打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ MSVCRT.DLL'。无法找到或打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ sechost.dll'。无法找到或打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ Rpcrt4.dll中'。无法找到或打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ sspicli.dll'。无法找到或打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ cryptbase.dll'。无法找到或打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ vcruntime140d.dll'。无法找到或打开PDB 文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ ucrtbased.dll'。无法找到或打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ API-MS-双赢的核心时区 - l1-1-0.dll'。找不到 或打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ API-MS-双赢的核心文件l2-1-0.dll'。找不到或 打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ API-MS-双赢的核心定位 - l1-2-0.dll'。不能 找到或打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ API-MS-双赢的核心同步-l1-2-0.dll'。找不到或 打开PDB文件。 'ConsoleApplication1.exe'(Win32):已加载 'C:\ WINDOWS \ Syswow64资料\ API-MS-双赢核心processthreads-l1-1-1.dll'。 无法找到或打开PDB文件。 'ConsoleApplication1.exe'(Win32): 加载'C:\ Windows \ SysWOW64 \ api-ms-win-core-file-l1-2-0.dll'。不能 找到或打开PDB文件。该计划'[3052] ConsoleApplication1.exe已退出,代码为0(0x0)。
答案 0 :(得分:1)
这个代码赢得了一致的原因有两个原因:
如果在Windows Vista或更高版本上运行,则需要管理员权限(例如提升的UAC)才能写入HKLM。您可以通过启动Admin命令提示符或以管理员身份运行Visual Studio
如果此代码编译为32位应用程序但在64位系统上运行,则实际修改以下密钥:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
如果你考虑这两点,代码 就可以了。我建议检查每个功能的返回代码。例如:
LONG lResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
0,
KEY_WRITE,
&hkey);
如果您运行没有管理员权限的代码,您将发现此返回5(ERROR_ACCESS_DENIED)。