線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3951
推到 Plurk!
推到 Facebook!

注册表在Windows2008下读不到问题, 已经测试delphi7和xe都不可以

 
delphi12345
一般會員


發表:1
回覆:0
積分:0
註冊:2014-07-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-07-20 12:07:25 IP:119.123.xxx.xxx 訂閱

[code delphi]
reg:TRegistry;
list:tstringlist;
begin
list:=tstringlist.create;
reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('software\',false);
reg.GetKeyNames(list);
Writeln(list.text);
Halt;
[/code]

你会发现software键值下很多都读取不到, 最初我以为我是delphi7的问题, 后来使用了xe编译, 在windows2008下问题依旧
问题是在2008下使用 reg query hklm\software命令 就可以完全的读取到
xiaolaba
一般會員


發表:10
回覆:17
積分:5
註冊:2010-05-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-07-28 22:20:35 IP:36.231.xxx.xxx 訂閱
可能是 UAC 的問題, win7/ win8 都會
你看看 reg.OpenKey 傳回來的值就可以判斷
win32 用 RegOpenKeyEx
俺最近做過
編譯時選 admin

Return value

If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is a nonzero error code defined in Winerror.h. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error.



===================引 用 delphi12345 文 章===================

[code delphi]
reg:TRegistry;
list:tstringlist;
begin
list:=tstringlist.create;
reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('software\',false);
reg.GetKeyNames(list);
Writeln(list.text);
Halt;
[/code]

你会发现software键值下很多都读取不到, 最初我以为我是delphi7的问题, 后来使用了xe编译, 在windows2008下问题依旧
问题是在2008下使用 reg query hklm\software命令 就可以完全的读取到
------
http://xiaolaba.wordpress.com
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-07-21 10:50:25 IP:60.248.xxx.xxx 未訂閱
REG 的讀取使用 , 我已經用了很多年了 ,
目前都很順利
環境 :
WINDOWS 2000, XP , 7 , VISTA DELPHI 7 , DELPHI 2007 , DELPHI XE,XE2

以上供參考

------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-07-21 15:47:32 IP:125.71.xxx.xxx 訂閱
註冊表也有區分 x64 跟 x86 的
x86 的程式在 x64 OS 要讀取 HKLM\Software 時,會自動重導至 HKLM\Software\WoW6432Node
這就是你說的「讀不到」的原因
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-07-21 22:04:13 IP:60.248.xxx.xxx 未訂閱
若問題出在這裡....不知這問題有解嗎?
===================引 用 sryang 文 章===================
註冊表也有區分 x64 跟 x86 的
x86 的程式在 x64 OS 要讀取 HKLM\Software 時,會自動重導至 HKLM\Software\WoW6432Node
這就是你說的「讀不到」的原因
------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-07-22 09:42:24 IP:118.169.xxx.xxx 未訂閱
這當然有解啦!
1. 你要先自行判斷 os 系統是 32 或 64 (這網路上有提供source code 可參考)
2. 如果 os 是 64, 註冊表要用標準的 node, 如果是32則要加 Wow64 (要看你要讀那裡的表)
===================引 用 ANDY8C 文 章===================
若問題出在這裡....不知這問題有解嗎?
===================引 用 sryang 文 章===================
註冊表也有區分 x64 跟 x86 的
x86 的程式在 x64 OS 要讀取 HKLM\Software 時,會自動重導至 HKLM\Software\WoW6432Node
這就是你說的「讀不到」的原因
xiaolaba
一般會員


發表:10
回覆:17
積分:5
註冊:2010-05-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-07-22 13:04:36 IP:110.28.xxx.xxx 訂閱

======= ===================引 用 ANDY8C 文 章=HKLM\Software\WoW6432Node
這就是你說的「讀不到」的原因 學到新招數 謝謝 有機會再來驗證一下
------
http://xiaolaba.wordpress.com
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-07-29 08:52:18 IP:59.127.xxx.xxx 訂閱
在 x64 的 OS 之下,應用程式想要讀取 HKLM\Software 時,OS 會自動分流
x86 應用程式讀取到的其實是 HKLM\Software\WOW6432Node

就像 C:\Windows\System32 目錄,x86 應用程式取到的其實是 C:\Windows\SysWOW64 是一樣的意思

所以不要再想 x86 應用程式在 x64 作業系統中要讀取真正的 HKLM\Software 這件事情了
解法就是寫一個 x64 的應用程式來讀取
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
stacker_liew
中階會員


發表:59
回覆:168
積分:65
註冊:2004-05-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2017-11-13 20:04:55 IP:42.153.xxx.xxx 未訂閱
其實道理很簡單,一般上我們運行的64位元的視窗作業系統,理想狀況下應該是所有軟件都是要運行64位元的。
但為了應付一大堆從XP留下來的軟件,所以微軟再在64位元視窗下再創建了一個32位元的子系統,就當年在視窗95下面創建了一個16位元子系統的道理一樣。

這也是微軟擁抱超微的x64,而不支持英特爾的自家64位元的主要原因之一。
系統時間:2024-03-28 23:52:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!