請教該如何備份整個Registry |
尚未結案
|
lordlost
一般會員 發表:2 回覆:1 積分:0 註冊:2003-08-06 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
...backup a branch of the registry?
http://www.swissdelphicenter.ch/torry/showcode.php?id=1330
unit RegExpo; interface uses Windows, rRegistry, Classes, SysUtils; {$I-} {$LONGSTRINGS ON} { Regexpo Author : Arthur Hoornweg (arthur.hoornweg@email.de) Version : 1.00, May 1998 O/S : Windows 95, 98, ME, NT, 2000, XP Delphi 2 Function : This unit allows you to backup a branch of the registry into a *.REG file, that is compatible with "regedit". Double-clicking such a file in the explorer will import it. Example: ExportRegistryBranch(HKEY_LOCAL_MACHINE,'SOFTWARE\Borland\Delphi','A:\DELPHI.REG') (c) 1998 A.M. Hoornweg. All rights reserved. You may use this software for all purposes, both commercial and noncommercial, as long as proper credit is given. The sourcecode may be distributed freely, as long as this copyright is included and no more than a marginal fee is asked. Disclaimer: I accept no responsibility whatsoever for any damages caused by these routines. Use them at your own risk. If you find any bugs, please let me know. } procedure ExportRegistryBranch(Rootsection: Integer; regroot: string; FileName: string); implementation function dblBackSlash(t: string): string; var k: longint; begin Result := t; {Strings are not allowed to have} for k := Length(t) downto 1 do {single backslashes} if Result[k] = '\' then Insert('\', Result, k); end; procedure ExportRegistryBranch(rootsection: Integer; Regroot: string; FileName: string); var reg: TRegistry; f: Textfile; p: PChar; procedure ProcessBranch(root: string); {recursive sub-procedure} var values, keys: TStringList; i, j, k: longint; s, t: string; {longstrings are on the heap, not on the stack!} begin Writeln(f); {write blank line} case rootsection of HKEY_CLASSES_ROOT: s := 'HKEY_CLASSES_ROOT'; HKEY_CURRENT_USER: s := 'HKEY_CURRENT_USER'; HKEY_LOCAL_MACHINE: s := 'HKEY_LOCAL_MACHINE'; HKEY_USERS: s := 'HKEY_USERS'; HKEY_PERFORMANCE_DATA: s := 'HKEY_PERFORMANCE_DATA'; HKEY_CURRENT_CONFIG: s := 'HKEY_CURRENT_CONFIG'; HKEY_DYN_DATA: s := 'HKEY_DYN_DATA'; end; Writeln(f, '[' s '\' root ']'); {write section name in brackets} reg.OpenKey(root, False); try values := TStringList.Create; try keys := TStringList.Create; try reg.GetValuenames(values); {get all value names} reg.GetKeynames(keys); {get all sub-branches} for i := 0 to values.Count - 1 do {write all the values first} begin s := values[i]; t := s; {s=value name} if s = '' then s := '@' {empty means "default value", write as @} else s := '"' s '"'; {else put in quotes} Write(f, dblbackslash(s) '='); {write the name of the key to the file} case reg.Getdatatype(t) of {What type of data is it?} rdString, rdExpandString: {String-type} Writeln(f, '"' dblbackslash(reg.ReadString(t) '"')); rdInteger: {32-bit unsigned long integer} Writeln(f, 'dword:' IntToHex(reg.readinteger(t), 8)); {write an array of hex bytes if data is "binary." Perform a line feed after approx. 25 numbers so the line length stays within limits} rdBinary: begin Write(f, 'hex:'); j := reg.GetDataSize(t); {determine size} GetMem(p, j); {Allocate memory} reg.ReadBinaryData(t, p^, J); {read in the data, treat as pchar} for k := 0 to j - 1 do begin Write(f, IntToHex(Byte(p[k]), 2)); {Write byte as hex} if k <> j - 1 then {not yet last byte?} begin Write(f, ','); {then write Comma} if (k > 0) and ((k mod 25) = 0) {line too long?} then Writeln(f, '\'); {then write Backslash lf} end; {if} end; {for} FreeMem(p, j); {free the memory} Writeln(f); {Linefeed} end; else Writeln(f, '""'); {write an empty string if datatype illegal/unknown} end;{case} end; {for} finally reg.CloseKey; end; finally {value names all done, no longer needed} values.Free; end; {Now al values are written, we process all subkeys} {Perform this process RECURSIVELY...} for i := 0 to keys.Count - 1 do ProcessBranch(root '\' keys[i]); finally keys.Free; {this branch is ready} end; end; { ProcessBranch} begin if RegRoot[Length(Regroot)] = '\' then {No trailing backslash} SetLength(regroot, Length(Regroot) - 1); Assignfile(f, FileName); {create a text file} Rewrite(f); if ioResult <> 0 then Exit; Writeln(f, 'REGEDIT4'); {"magic key" for regedit} reg := TRegistry.Create; try reg.Rootkey := Rootsection; {Call the function that writes the branch and all subbranches} ProcessBranch(Regroot); finally reg.Free; {ready} Close(f); end; end; end. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |