c ++没有将值插入注册表

时间:2016-07-12 11:53:54

标签: c++ registry

我将测试程序插入注册表的测试程序不起作用。我还没有在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)。

1 个答案:

答案 0 :(得分:1)

这个代码赢得了一致的原因有两个原因:

  1. 如果在Windows Vista或更高版本上运行,则需要管理员权限(例如提升的UAC)才能写入HKLM。您可以通过启动Admin命令提示符或以管理员身份运行Visual Studio

  2. 来尝试此操作
  3. 如果此代码编译为32位应用程序但在64位系统上运行,则实际修改以下密钥:

    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
    
  4. 如果你考虑这两点,代码 就可以了。我建议检查每个功能的返回代码。例如:

    LONG lResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
        "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
        0,
        KEY_WRITE,
        &hkey);
    

    如果您运行没有管理员权限的代码,您将发现此返回5(ERROR_ACCESS_DENIED)。