簡體   English   中英

C ++沒有將值插入注冊表

[英]c++ isn't Inserting values into 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 \\ Desktop \\ ConsoleApplication1 \\ Debug \\ 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-win-core-timezone-l1-1-0.dll'。 找不到或打開PDB文件。 'ConsoleApplication1.exe'(Win32):已加載'C:\\ Windows \\ SysWOW64 \\ api-ms-win-core-file-l2-1-0.dll'。 找不到或打開PDB文件。 'ConsoleApplication1.exe'(Win32):已加載'C:\\ Windows \\ SysWOW64 \\ api-ms-win-core-localization-l1-2-0.dll'。 找不到或打開PDB文件。 'ConsoleApplication1.exe'(Win32):已加載'C:\\ Windows \\ SysWOW64 \\ api-ms-win-core-synch-l1-2-0.dll'。 找不到或打開PDB文件。 'ConsoleApplication1.exe'(Win32):已加載'C:\\ Windows \\ SysWOW64 \\ api-ms-win-core-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. 如果在Windows Vista或更高版本上運行,則需要管理員權限(例如,提升的UAC)才能寫入HKLM。 您可以通過啟動Admin命令提示符或以管理員身份運行Visual Studio來嘗試此操作

  2. 如果此代碼被編譯為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)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM