用Delphi修改系统环境变量
2010-09-02 08:55
579 查看
最近有个程序,要用到Oracle客户端,又不想用官方的,就想自己写一个用来安装。要安装Oracle客户端有几个工作要做:
第一个是复制Oracle客户端文件。
第二个是写注册表。
第三个是注册环境变量。
用Delphi怎么修改系统的环境变量呢,上网找了一下,写了下面的程序,怕以后忘记了,贴上来。
merge.bat批处理文件的内容如下:
regedit /s Instal_Ora_Cli.reg
注册表文件内容如下:
第一个是复制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 { Private declarations } public { Public declarations } 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 {网上抄来的COPY文件的方法} 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 //检查返回值是0表示成功,再检查用户是否取消了复制 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'; //我们要修改的是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; //把'C:/Ora_Cli/bin'这个值加入到环境变量的最后 {网上看到的方法都是用WriteString这个函数来写Path环境变量, 可是我用了就有问题 用了这个函数后,系统对%systemroot%,这带%的变量就不翻译了,有很多命令如ping就不能用了, 会说ping不是可执行命令等等,后来经高手提醒说:用WriteExpandString就没问题了。 看了Delphi的帮助,有这么一句: Call WriteExpandString to store a string that contains unexpanded references to environment variables such as %PATH% } //reg.WriteString(sName,sCurStr); //用这句就有问题 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"
相关文章推荐
- [常用工具]win系统下通过修改环境变量实现“开始-运行”来打开应用程序
- Linux 修改系统环境变量(Z)
- Delphi 中相对路径与绝对路径、系统环境变量等相关函数说明
- Linux系统下修改环境变量PATH路径的方法
- 详解Linux系统下修改环境变量PATH路径的方法
- Bash玩转脚本5之Windows上修改环境变量的脚本系统
- ubuntu修改系统环境变量文件导致起不来
- VC修改环境变量, 不重启系统, 即时生效.
- 在SuSE下面修改系统语言环境变量
- linux中修改环境变量之后导致系统崩溃(用户所有命令不能使用)的解决办法
- 系统环境变量的设置Delphi函数
- Delphi 中相对路径与绝对路径、系统环境变量等相关函数说明
- Linux如何修改环境变量PATH,以及系统登录时读取文件的顺序
- HWND_BROADCAST的一个用法——修改环境变量,立即通知系统
- linux系统查看和修改PATH环境变量的方法
- 【杂谈】Linux系统修改环境变量PATH路径---终结篇
- Ubuntu 12.04 - 修改环境变量导致无法登录系统
- Ubuntu系统中安装修改JAVA环境变量
- Delphi利用系统环境变量获取常用系统目录
- ubuntu环境下修改环境变量导致系统无法登录的解决方法