第一个是复制Oracle客户端文件。
第二个是写注册表。
第三个是注册环境变量。
用Delphi怎么修改系统的环境变量呢,上网找了一下,写了下面的程序,怕以后忘记了,贴上来。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Registry,ShellAPI; type TForm1 = class(TForm) btnAddOraCli: TButton; procedure btnAddOraCliClick(Sender: TObject); private public procedure SetEnvPath; function CopyOraFiles(const SourDir,DestDir :string) :Boolean; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btnAddOraCliClick(Sender: TObject); var sbtnCaption : string; begin sbtnCaption := btnAddOraCli.Caption; btnAddOraCli.Enabled := False; btnAddOraCli.Caption := '正在复制文件'; if not CopyOraFiles('Ora_Cli', 'C:/') then begin ShowMessage('复制文件出错,Oracle客户端没有设置成功'); Exit; end; WinExec('merge.bat',sw_hide); btnAddOraCli.Caption :='正在设置环境变量'; SetEnvPath; btnAddOraCli.Enabled := True; btnAddOraCli.Caption := sbtnCaption; end; function TForm1.CopyOraFiles(const SourDir, DestDir: string): Boolean; var fOPStruct :TSHFileOpStruct; begin FillChar(fOPStruct,SizeOf(fOPStruct),0); with fOPStruct do begin Wnd := 0; wFunc := FO_COPY; pFrom := PChar(SourDir + #0); pTo := PChar(DestDir +#0); fFlags := FOF_NOCONFIRMATION + FOF_NOCONFIRMMKDIR ; end; if (SHFileOperation(fOPStruct) = 0) and (fOPStruct.fAnyOperationsAborted = False) then Result := True else Result := False; end; procedure TForm1.SetEnvPath; var reg : TRegistry; sLMKey : string; sCurStr : string; sStrToAdd: string; sName: string; begin sLMKey := 'System/CurrentControlSet/Control/Session Manager/Environment'; sName := 'Path'; sStrToAdd := 'C:/Ora_Cli/bin'; reg := TRegistry.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; if reg.OpenKey(sLMKey,False) then begin sCurStr := reg.ReadString(sName); if Pos(sStrToAdd,sCurStr) = 0 then begin sCurStr := sCurStr + ';' + sStrToAdd; reg.WriteExpandString(sName,sCurStr); reg.CloseKey; SetEnvironmentVariable(PChar(sName),PChar(sCurStr)); SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,Integer(PChar('Environment'))); ShowMessage('Oracle客户端安装成功'); end else ShowMessage('此环境变量已经存在'); end; except on E: Exception do begin reg.Free; ShowMessage('Error: ' + E.Message); Exit; end; end; reg.Free; end; end.merge.bat批处理文件的内容如下:
regedit /s Instal_Ora_Cli.reg
注册表文件内容如下:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE] "ORACLE_HOME"="C://Ora_Cli" "ORACLE_HOME_NAME"="OraHome92" "ORACLE_GROUP_NAME"="Oracle - OraHome92" "NLS_LANG"="AMERICAN_AMERICA.US7ASCII" "VOBHOME2.0"="C://Ora_Cli" [HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/ALL_HOMES] "HOME_COUNTER"="1" "DEFAULT_HOME"="OraHome92" "LAST_HOME"="0" [HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/ALL_HOMES/ID0] "NAME"="OraHome92" "PATH"="C://Ora_Cli" "NLS_LANG"="NA" [HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0] "ID"="0" "ORACLE_GROUP_NAME"="Oracle - OraHome92" "ORACLE_HOME_NAME"="OraHome92" "ORACLE_HOME"="C://Ora_Cli" "NLS_LANG"="AMERICAN_AMERICA.US7ASCII" "ORAMTS_CP_TRACE_LEVEL"="0" "ORAMTS_CONN_POOL_TIMEOUT"="120" "ORAMTS_SESS_TXNTIMETOLIVE"="120" "ORAMTS_NET_CACHE_MAXFREE"="5" "ORAMTS_NET_CACHE_TIMEOUT"="120000" "ORAMTS_OSCREDS_MATCH_LEVEL"="OS_AUTH_LOGIN" "ORACLE_HOME_KEY"="Software//ORACLE//HOME0"