Board logo

主題: 為何有些軟體愛搞登錄檔?跟著登錄檔垃圾越來越多? [打印本頁]

發表人: ultraplayer    時間: 2005-3-24 06:48 PM     主題: 為何有些軟體愛搞登錄檔?跟著登錄檔垃圾越來越多?

有些軟體愛搞登錄檔?非要把設定檔放在登錄檔不可,跟著登錄檔垃圾越來越多,然後重灌後軟體就不能用了,直接把資料放在程式目錄裡不就好了,為啥一定要放登錄檔?
發表人: Acute    時間: 2005-3-24 07:02 PM

以前就是用.INI 的檔案, 結果, 每個軟體都需要INI file
so, MS 就推動用registry, registry 就像是系統的資料庫一樣
任何軟體的資訊, 都記錄到registry 內, 統一管理
而且, OLE 的功能, 也需要透過registry 來進行相關記錄
so, 用registry 是需要的

Acute.
發表人: swimman    時間: 2005-3-25 12:22 AM

registry的好處最大的是比較不會有USER去亂改
第二是有分字串跟數值不同的型態
第三有很多API可以CALL來處理
第四點兩下REG檔就可以設定完成
重灌會出問題是出在COM身上比較多吧
發表人: aamaster    時間: 2005-3-25 05:00 PM

個人倒是持不同的看法

我覺得Microsoft最失敗的的地方 就是使用registry紀錄系統的參數設定

使用registry紀錄系統參數 有兩個最大的缺點

1.registry裡的系統參數只在開機時讀一次 所以當registry裡的系統參數被更動之後
 一定要重新開機

2.如果registry檔案損毀 對不起 只有重灌Windows一途

呵呵 這二個大缺點 就使得Windows永遠無法擠身一流作業系統的地步

同樣行之有年的UNIX系統 卻也不見使用類似Windows的方式紀錄系統參數
而是將參數個別紀錄在相關的檔案裡 並且是動態的將系統參數載入
也因此 即使今天更動了UNIX的虛擬記憶體設定 也只需要將系統重新讀取一次
參數檔案 不必像Windows一般重新開機

registry也是提供病毒窩身的一個優良的環境 因為大家共用一個registry檔案
所以 安全性就相對的降低許多 別說registry損毀 病毒只要更動某個參數
就可以讓Windows動彈不得

至於AP使用registry紀錄相關的設定 更是一大敗筆
第一.registry檔案的大小 必須在系統一開機就固定 (你可以更動registry檔案的大小 但是
必須重新開機) 如果registry的檔案被佔滿了 那就只有重新開機一途

第二.大多數的AP在移除時 並不會主動的移除registry裡的設定 有些AP使用到Windows
的系統元件時 Windows本身更不允許移除這個AP紀錄在registry裡的設定
要移除 只有重新開機一途 如果不移除 只會導致registry越來越肥大
惡性循環就由此開始 下次Windows開機時 又要將這個肥大的registry讀一次...

你可以發現 使用Windows作業系統時 重新開機的次數 幾乎與你安裝AP的次數差不多

呵呵 Windows如果不使用registry的話 我想 會比現在更穩定

以前在DOS的時代的Windows 3.1 也沒有使用registry 是使用INI的方式紀錄系統
設定 Windows 3.1一樣也可以使用OLE....
而且 只要Windows 3.1的系統執行檔正常
那麼 只要備分所有的INI檔案 就可以保證永遠有一個乾淨的Windows 3.1可以用

不像現在 要用GHOST之類的軟體來備份Windows...
發表人: Acute    時間: 2005-3-25 06:54 PM

1. registry 只在開機讀一次?
   基本上, 任何軟體都可以在任何時候讀取/修改registry, 並沒有所謂的開機讀一次, 改了就得重開機的問題.

2. registry 檔案損毀, 需要重灌?
   基本上, 系統有backup registry, 如果registry 損毀, 系統開機時會告知內容損毀, 並且重新載入最後backup 的registry file, 並沒有所謂需要重灌Windows 這一回事

3. Windows 因為上述兩個問題, so, Windows 非一流作業系統, 因為UNIX 不使用?
    基本上, Windows 算幾流不值得爭議, 但是, UNIX 是老系統, 當然不會有這種作法.
    Windows 3.1 也沒有大量使用, 直到95以後, 才大量使用這種作法.
    這個作法, 跟Windows 設計的好不好, 沒有任何直接關係才對, 呵呵

4. registry 檔案大小固定? 滿了需要重開機
    基本上... 這是我第一次聽說, 不知道根據哪份文件? 或者根據啥證據?
   根據我個人粗淺認知, registry 就是一種資料庫架構而已, 從沒聽過資料庫需要一開始就決定file 大小的

5. AP 不移除registry, AP registry 不准移除, 移除需重開機?
   基本上, AP 移除時, 有沒有跟著移除registry, 這是AP 的問題, 跟Windows 沒有關係
    理論上, 並不會有不准移除的registry
   實際上, 我沒有遇過要移除registry 而需要重開機的現象

基本上, registry 的觀念是好是壞, 或許值得爭議
但是, 觀念要先正確!
以資料庫的方式管理所有程式的設定值, 固然有資料庫損毀就毀掉一切的可能性存在
但是, 就更多方面的考量, 統一管理總是比散落各處要好很多
以前的Windows 不複雜, 系統參數有限, 就有幾個很複雜的INI file了
現在的Windows 的複雜度, 如果還是靠INI file, 那將是一場惡夢
而且, 一堆散落的INI file, 只要他跟目前registry 功能相似 (可以用來調控系統參數)
那在registry 具備的缺點, 在INI 內也必然具備

Acute.
發表人: aamaster    時間: 2005-3-25 08:58 PM

>>基本上, 任何軟體都可以在任何時候讀取/修改registry, 並沒有所謂的開機讀一次, 改了就得>>重開機的問題.

呵呵 安裝codec要不要重新開機啊?裝完PowerDVD 要不要重新開機啊?

裝完新版的IE 要不要重新開機啊? 在Windows更新Update後 要不要重新開機啊?

你可以試試 把IE的暫存資料夾搬到其他目錄 看看Windows會要求你做什麼...

>>基本上, 系統有backup registry, 如果registry 損毀, 系統開機時會告知內容損毀, 並且重新>>載入最後backup 的registry file, 並沒有所謂需要重灌Windows 這一回事

嗯 我不知道Windows會自動Backup Registry喔 請大大告知在哪裡可以設定自動backup的
選項...

>>基本上... 這是我第一次聽說, 不知道根據哪份文件? 或者根據啥證據?  根據我個人粗淺認知, >>registry 就是一種資料庫架構而已, 從沒聽過資料庫需要一開始就決定file 大小的

在Windows 2000的系統選項裡...

>>基本上, AP 移除時, 有沒有跟著移除registry, 這是AP 的問題, 跟Windows 沒有關係
>>理論上, 並不會有不准移除的registry   實際上, 我沒有遇過要移除registry 而需要重開機的現>>象

嗯 這是單純的AP的問題喔... 如果真是這樣的話 網上也不會有一大堆
registry cleaner的軟體囉

資料庫有很多種方式 不是只有registry才是資料庫啊

registry最大的缺點 就是把系統的參數與AP的參數 紀錄在同一個檔案裡
這樣對作業系統來說 是很不利的

還有 複雜度與registry也沒有太大的關係 UNIX系統也很複雜
新進的LINUX系統 也不見得比windows單純 但是 這兩個系統都沒有使用與
Windows相類似的做法

INI檔案可以分開儲存 但是registry只有一份喔

基本上, registry 的觀念是好是壞, 或許值得爭議
但是, 觀念要先正確!

[aamaster 在 2005-3-25 09:02 PM 作了最後編輯]
發表人: swimman    時間: 2005-3-25 10:21 PM

說到寫程式大家應該都聽說過MSDN吧
這段就是MSDN裡面找出來的

The Registry Made Easy

A Classy Way to Bypass the Awkward Registry API
(以上是文章的名稱)
By Romke Soldaat
(作者)
Compared with the bad old INI files, the Windows registry is not only a safer place for system and application
                            ^^^^^^^^^^^ini又爛又舊                                   ^^^^^^^不容易被亂改
settings, it also offers more ways to store different types of data, and lets you organize your settings in a
                                                             ^^^^^^^^^^^^^^不同的資料型態      
hierarchical manner. But, unlike the straightforward functions that deal with INI files, the registry API is more
^^^^^^^^^^^^^可以有SUBKEY,可以有類似子目錄的結構
complex. You can't just read and write data with a single function call - you must open a key before you can access it, and close the key when you're done with it.
發表人: swimman    時間: 2005-3-25 10:35 PM

寫程式很重要就是儲存程式的狀態
大家都知道程式碼編譯好之後就沒有辦法修改
所以就必須想辦法來記錄
第一代的方法就是WIN.ini這是WIN31的時代
大家都一起寫在這個檔案裡頭
每一個APPLICATION為單位來使用
第二代的方法是privateProfile
每一個程式都有自己的INI
第三個
這也是COM風起雲湧的時代
COM利用REGRISTRY當契約的介面
每個程式都把設定放在REGISTRY
MS也有很多API可以提取這些設定
現在則是邁入了XML的時代
很多設定都是放在XML的檔案裡頭

當然除了這些之外還有人用文字檔
這個是最麻煩的方法要自己開IO處理STREAM

另外還有SERIALIZE這個方法也不錯
一口氣就可以放很多物件進去
一口氣拿出來
而且是以物件為單位
並且是用二進位的方式寫入硬碟也不太可能被修改
當然缺點也是不容易直接打開來改
通常這類的檔案附檔名是.bin大家應該也不會很陌生吧
發表人: Acute    時間: 2005-3-25 11:05 PM

1. 安裝/解除安裝某些軟體需不需要重開機, 問題跟registry 一點關係都沒有
    問題在於該軟體的模組有沒有能力在系統沒有reboot 的情形下自動卸載
    so, 這並非registry 的問題, 而是該軟體模組的問題

2. registry 是auto backup 的, maybe 在regsitry 裏面有相關的record 可以改變是否backup

3. Windows 2000 有設定registry size 的畫面? 麻煩貼出來瞧一瞧, 我還真沒見過該畫面哩

4. 軟體廠商沒有善盡清除registry 的工作, 才會有那些所謂cleaner 程式, 這跟registry 架構本來就沒關係, 不可以本末倒置, 就好像沒有人無聊寫病毒, 自然不需要掃毒程式, 而不是沒有掃毒程式不行.

5. Unix/Linux 很多東西是不能調整的, Windows 的registry 提供調整的契機. Unix/Linux 並沒有像Windows 那麼複雜的OLE 機制, 所以他可以不需要.

6. 我說: registry 是一種資料庫架構, 並非說registry 才是資料庫, 請看懂中文的意思 @_@

7. INI 最大問題就是散落一地, 所以registry 才提供整合的作法, 所有程式透過統一的界面機制運作, 這樣子管理上才是方便的. 而且OLE 複雜的叫用界面也是利用registry 當作溝通橋樑, 如果是散落一地的INI, 根本不可能可以做到.

Acute.
發表人: ELong    時間: 2005-3-26 02:40 AM

最喜歡看這種沒有人身攻擊,
各憑自己的專業知識,
冷靜以對的討論與分析,
宛若八仙過海,
各顯神通。

沒事沒事,
不要理我,
妳們繼續,妳們繼續.....
發表人: jocosn    時間: 2005-3-26 03:17 AM

毒王寫的比較有道理吧,
乍看一些東西REGISTRY只讀取一次還以為自己孤陋寡聞
感覺怎麼出個網路追追追

不過這些都不是問題
因為 .NET 的新程式允許你不用加任何的 REGISTRY
你可以設計一個純.NET程式,直接灌好後,再把該目錄下的程式直接拷貝到另一台電腦直接執行

所以大家要學就學 C#,VB.NET,VC++.NET
有 .NET 就對了 ........

我也沒試過,不知道對不對
發表人: swimman    時間: 2005-3-26 03:23 AM

承蒙版主關心我就多說點吧:icons8:icons8
一般寫程式會用到的registry大概就是在HKEY_LOCAL_MACHINE\Software\CompanyName\SoftwareName
或是HKEY_CURRENT_USER\Software\CompanyName\SoftwareName
另外在安裝COM元件的時候還要寫到HKEY_CLASSES_ROOT
不過這個東西幾乎都是開發工具來HANDLE
基本上公司如果肯花錢買個InstallShield X 把程式包一包他就會幫你做好安裝移除的工作,這部分的REGISTRY也不用擔心
回到主題所以移除程式REGISTRY出問題頂多是移不掉,無法重新安裝,這個軟體沒得用
不會把電腦搞到不能運作
另外提到現在程式開發已經走向.net的時代
.net已經把Registry踢進垃圾桶了,.net的設定都改用XML來做設定了
由於.net的高生產力特性而且微軟目前宣稱用80%的精力推廣
所以可以預期的大部分的REGISTRY都會消失
而且在DLL HELL的折磨之下很多人開始朝綠色軟體的方向發展
但是想要在WINDOWS上看不到registry......短時間是很難的
發表人: swimman    時間: 2005-3-26 03:32 AM


引用:
jocosn寫到:
毒王寫的比較有道理吧,
乍看一些東西REGISTRY只讀取一次還以為自己孤陋寡聞
感覺怎麼出個網路追追追

不過這些都不是問題
因為 .NET 的新程式允許你不用加任何的 REGISTRY
你可以設計一個純.NET程式,直接灌好後,再把該目錄下的程式直接拷貝到另一台電腦直接執行

所以大家要學就學 C#,VB.NET,VC++.NET
有 .NET 就對了 ........

我也沒試過,不知道對不對

.net程式如果只使用LOCAL元件就可以直接拷貝執行,那種稱為xcopy安裝
如果有使用元件是放在GAC那就不行了
當然如果都沒有使用.net FrameWork之外元件那當然就直接複製就可以了
不過當然要灌.net FrameWork才會動
另外建議大家要學就從C#開始
用C++那叫自找麻煩
vb.net會簡單一點但是薪水會少一些
發表人: jocosn    時間: 2005-3-26 04:06 AM


引用:
swimman寫到:
.net程式如果只使用LOCAL元件就可以直接拷貝執行,那種稱為xcopy安裝
如果有使用元件是放在GAC那就不行了
....(略)


對阿,不想用 registry 的人用 Java
Java 的程式都沒有登入檔
發表人: 桂正和    時間: 2005-3-26 08:22 AM


引用:
Acute寫到:
3. Windows 2000 有設定registry size 的畫面? 麻煩貼出來瞧一瞧, 我還真沒見過該畫面哩
Acute.


個人認為
我想他說的是記憶體分頁的東西
系統裡面怎麼看都只有這東西有設定大小..

至於重開機才能使登錄檔生效..
如果我沒記錯的話
軟體只要有需要
就會自己跑去找登錄檔
這是很基本的流程邏輯吧.......
看的不知所以然
感覺似是而非
發表人: swimman    時間: 2005-3-26 11:36 PM

看大家都對REGISTRY這麼有興趣
我再深入介紹一下registry的相關知識

這些都是從Inside windows 2000 3rd (microsoft press)中摘錄出來

1.Registry 在哪裡

HKEY_LOCAL_MACHINE\SYSTEM         c:\Winnt\System32\Config\System
HKEY_LOCAL_MACHINE\SAM              c:\Winnt\System32\Config\Sam
HKEY_LOCAL_MACHINE\SECURITY      c:\Winnt\System32\Config\Security
HKEY_LOCAL_MACHINE\SOFTWARE     c:\Winnt\System32\Config\Software
當然winnt名稱也可能會是windows這個不一定
在哪底下應該會看到一些有幾百K到幾十M的檔案

2.Registry的結構
這個跟資料結構有關還是直接去看這本書吧

3.安全性考量

以SYSTEM為例

To further protect the integrity of the crucial SYSTEM hive, the configuration manager maintains a mirror of the
                                                                                                                                             ^^^^^^^^
SYSTEM hive on disk. If you look at the nonhidden files in your \Winnt\System32\Config directory, you'll see three
^^^^^^^^^所以的確是有備份                                                ^^^^^^^^^^^^^^^^放在這裡  
files with the base name System : System, System.alt, and System.sav. System.alt is the alternate hive .
                                                   ^^^^^^^^^^^^^^^^^^^^^^^ 總共有三個實體兩個備份                                                      
Whenever a hive sync flushes dirty sectors to the SYSTEM hive, the hive sync also updates the System.alt hive. If
修改的時候都會一起備份
the configuration manager detects that the SYSTEM hive is corrupt when the system boots, the configuration
如果正式的壞了
manager attempts to load the hive's alternate. If that hive is usable, it then uses that alternate to update the original
會嘗試載入備份
SYSTEM hive.
備份如果成功載入就會覆寫到正式的
System.sav is a copy of the SYSTEM hive that exists when Windows 2000 finishes installing. This copy can be used,
System.sav是視窗安裝完成後儲存的版本
usually only in extreme circumstances, to restore the computer's configuration to its initial state.
如果REGISTRY嚴重損壞的時候就會載入這個最古早的版本
發表人: ultraplayer    時間: 2005-3-30 01:16 PM

不過重灌XP後,那程式就不行用了,要重装也是蠻麻煩的
發表人: rainwen    時間: 2005-4-3 05:13 AM


引用:
桂正和寫到:

引用:
Acute寫到:
3. Windows 2000 有設定registry size 的畫面? 麻煩貼出來瞧一瞧, 我還真沒見過該畫面哩
Acute.


個人認為
我想他說的是記憶體分頁的東西
系統裡面怎麼看都只有這東西有設定大小..

至於重開機才能使登錄檔生效..
如果我沒記錯的話
軟體只要有需要
就會自己跑去找登錄檔
這是很基本的流程邏輯吧.......
看的不知所以然
感覺似是而非

Windows 2000 在系統內容中真的有registry size 的設定,
不過基本上很少有人會用到登錄檔大於預設值.....更何況還可以調高

而且在XP跟2003上就沒看到這項設定了


另外從98開始,Windows每次開機成功後就會自動備份一份登錄檔,以供將來損毀時還原用




歡迎光臨 TWed2k (http://twed2k.org/) Powered by Discuz! 4.1.0