用Delphi修改系统环境变量

来源:互联网 发布:易烊千玺舞蹈知乎 编辑:程序博客网 时间:2024/06/06 18:49

第一个是复制Oracle客户端文件。

第二个是写注册表。

第三个是注册环境变量。

用Delphi怎么修改系统的环境变量呢,上网找了一下,写了下面的程序,怕以后忘记了,贴上来。

[delphi] view plain copy
  1. unit Unit1;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  7.   Dialogs, StdCtrls,Registry,ShellAPI;  
  8.   
  9. type  
  10.   TForm1 = class(TForm)  
  11.     btnAddOraCli: TButton;  
  12.     procedure btnAddOraCliClick(Sender: TObject);  
  13.   private  
  14.     { Private declarations }  
  15.   public  
  16.     { Public declarations }  
  17.   procedure SetEnvPath; //设置环境变量  
  18.   function CopyOraFiles(const SourDir,DestDir :string) :Boolean; //复制整个文件夹  
  19.   end;  
  20.   
  21. var  
  22.   Form1: TForm1;  
  23.   
  24. implementation  
  25.   
  26. {$R *.dfm}  
  27.   
  28. procedure TForm1.btnAddOraCliClick(Sender: TObject);  
  29. var  
  30.   sbtnCaption : string;  
  31. begin  
  32.   sbtnCaption := btnAddOraCli.Caption;  
  33.   btnAddOraCli.Enabled := False;  
  34.   btnAddOraCli.Caption := '正在复制文件';  
  35.   if not CopyOraFiles('Ora_Cli''C:/'then  
  36.   begin  
  37.     ShowMessage('复制文件出错,Oracle客户端没有设置成功');  
  38.     Exit;  
  39.   end;  
  40.   WinExec('merge.bat',sw_hide);  //运行批处理文件,合并注册表信息  
  41.   btnAddOraCli.Caption :='正在设置环境变量';  
  42.   SetEnvPath;  
  43.   btnAddOraCli.Enabled := True;  
  44.   btnAddOraCli.Caption := sbtnCaption;  
  45. end;  
  46.   
  47. function TForm1.CopyOraFiles(const SourDir, DestDir: string): Boolean;  
  48. var  
  49.   fOPStruct :TSHFileOpStruct;  
  50. begin  
  51.   {网上抄来的COPY文件的方法}  
  52.   FillChar(fOPStruct,SizeOf(fOPStruct),0);  
  53.   with fOPStruct do  
  54.   begin  
  55.     Wnd := 0;  
  56.     wFunc := FO_COPY;  
  57.     pFrom := PChar(SourDir + #0);  
  58.     pTo := PChar(DestDir +#0);  
  59.     fFlags := FOF_NOCONFIRMATION + FOF_NOCONFIRMMKDIR ;  
  60.   end;  
  61.   if (SHFileOperation(fOPStruct) = 0and (fOPStruct.fAnyOperationsAborted = False) then //检查返回值是0表示成功,再检查用户是否取消了复制  
  62.     Result := True  
  63.   else  
  64.     Result := False;  
  65. end;  
  66.   
  67.   
  68. procedure TForm1.SetEnvPath;  
  69. var  
  70.   reg : TRegistry;  
  71.   sLMKey : string;  
  72.   sCurStr : string;  
  73.   sStrToAdd: string;  
  74.   sName: string;  
  75. begin  
  76.   sLMKey := 'System/CurrentControlSet/Control/Session Manager/Environment';  //环境变量保存在注册表的这个位置  
  77.   sName := 'Path'//我们要修改的是Path环境变量  
  78.   sStrToAdd := 'C:/Ora_Cli/bin'//要添加的环境变量  
  79.   reg := TRegistry.Create;  
  80.   try  
  81.     reg.RootKey := HKEY_LOCAL_MACHINE;  
  82.     if reg.OpenKey(sLMKey,False) then  
  83.     begin  
  84.       sCurStr := reg.ReadString(sName); //读取环境变量  
  85.       if Pos(sStrToAdd,sCurStr) = 0 then  //判断此环境变量是否已经存在  
  86.       begin  
  87.         sCurStr := sCurStr + ';' + sStrToAdd;  //把'C:/Ora_Cli/bin'这个值加入到环境变量的最后  
  88.   
  89.         {网上看到的方法都是用WriteString这个函数来写Path环境变量, 可是我用了就有问题 
  90.          用了这个函数后,系统对%systemroot%,这带%的变量就不翻译了,有很多命令如ping就不能用了, 
  91.          会说ping不是可执行命令等等,后来经高手提醒说:用WriteExpandString就没问题了。 
  92.          看了Delphi的帮助,有这么一句: 
  93.          Call WriteExpandString to store a string that contains unexpanded references to environment variables such as %PATH% 
  94.         }  
  95.         //reg.WriteString(sName,sCurStr);   //用这句就有问题  
  96.         reg.WriteExpandString(sName,sCurStr);  //把值写到注册表里  
  97.         reg.CloseKey;  
  98.         SetEnvironmentVariable(PChar(sName),PChar(sCurStr));//更新当前进程的环境变量  
  99.         SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,Integer(PChar('Environment'))); //通知所有上层窗口,环境参数变化  
  100.         ShowMessage('Oracle客户端安装成功');  
  101.       end  
  102.       else  
  103.         ShowMessage('此环境变量已经存在');  
  104.     end;  
  105.   except  
  106.     on E: Exception do  
  107.     begin  
  108.       reg.Free;  
  109.       ShowMessage('Error: ' + E.Message);  
  110.       Exit;  
  111.     end;  
  112.   end;  
  113.   reg.Free;  
  114. end;  
  115.   
  116. end.  

 

 

merge.bat批处理文件的内容如下:

regedit /s Instal_Ora_Cli.reg

 

 

注册表文件内容如下:

 

[xhtml] view plain copy
  1. Windows Registry Editor Version 5.00  
  2.   
  3. [HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE]  
  4. "ORACLE_HOME"="C://Ora_Cli"  
  5. "ORACLE_HOME_NAME"="OraHome92"  
  6. "ORACLE_GROUP_NAME"="Oracle - OraHome92"  
  7. "NLS_LANG"="AMERICAN_AMERICA.US7ASCII"  
  8. "VOBHOME2.0"="C://Ora_Cli"  
  9.   
  10. [HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/ALL_HOMES]  
  11. "HOME_COUNTER"="1"  
  12. "DEFAULT_HOME"="OraHome92"  
  13. "LAST_HOME"="0"  
  14.   
  15. [HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/ALL_HOMES/ID0]  
  16. "NAME"="OraHome92"  
  17. "PATH"="C://Ora_Cli"  
  18. "NLS_LANG"="NA"  
  19.   
  20. [HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0]  
  21. "ID"="0"  
  22. "ORACLE_GROUP_NAME"="Oracle - OraHome92"  
  23. "ORACLE_HOME_NAME"="OraHome92"  
  24. "ORACLE_HOME"="C://Ora_Cli"  
  25. "NLS_LANG"="AMERICAN_AMERICA.US7ASCII"  
  26. "ORAMTS_CP_TRACE_LEVEL"="0"  
  27. "ORAMTS_CONN_POOL_TIMEOUT"="120"  
  28. "ORAMTS_SESS_TXNTIMETOLIVE"="120"  
  29. "ORAMTS_NET_CACHE_MAXFREE"="5"  
  30. "ORAMTS_NET_CACHE_TIMEOUT"="120000"  
  31. "ORAMTS_OSCREDS_MATCH_LEVEL"="OS_AUTH_LOGIN"  
  32. "ORACLE_HOME_KEY"="Software//ORACLE//HOME0"  

原创粉丝点击