[英]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)。
該代碼無法始終如一地工作的原因有兩個:
如果在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)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.