DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: sprblck
今日帖子: 10
在线用户: 11
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 hugu (Delphi菜菜鸟) ★☆☆☆☆ -
普通会员
2012/8/29 17:23:03
标题:
Delphi 修改系统环境变量Path 浏览:2451
加入我的收藏
楼主: Delphi 修改系统环境变量Path
在主程序中
uses
  Registry,{操作注册表 - 添加系统环境变量 Path}

  private
      Procedure PR_SetEnvPath; {设置Windows环境变量Path 用户搜索 DLL 或 BPL等}


在MainForm.Create事件中
Procedure TPDAForm.FormCreate(Sender: TObject);
Begin
 PR_SetEnvPath; 
End;

自定义PR_SetEnvPath过程
{*** 自定义 PU_SetEnvPath 过程 **********}
procedure TPDAForm.PR_SetEnvPath;
Var T_Reg : TRegistry;
    T_LMKey,T_CurStr,T_StrToAdd,T_Name: String;
Begin
T_LMKey := 'System\CurrentControlSet\Control\Session Manager\Environment';{环境变

量保存在注册表的位置}
T_Name := 'Path';{要修改的是Path环境变量}
T_StrToAdd := ExtractFilePath(Application.ExeName)+'System\BPL';{要添加的环境变量

}
T_Reg := TRegistry.Create;
Try
  T_Reg.RootKey := HKEY_LOCAL_MACHINE;
  If T_Reg.OpenKey(T_LMKey,True) Then
     Begin
     T_CurStr := T_Reg.ReadString(T_Name);{读取 Path 环境变量}
     If Pos(T_StrToAdd,T_CurStr) = 0 Then {判断此环境变量是否已经存在}
        Begin
        T_CurStr := T_CurStr + ';' + T_StrToAdd;{把 T_StrToAdd 的值加入到环境变量

的最后}
        T_Reg.WriteExpandString(T_Name,T_CurStr);{把值写到注册表里}
        T_Reg.CloseKey;
        SetEnvironmentVariable(PChar(T_Name),PChar(T_CurStr));{更新当前进程的环境

变量}
        SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,Integer(PChar

('Environment')));{通知所有上层窗口,环境参数变化}
        {ShowMessage('添加环境变量成功');}
        End Else {ShowMessage('此环境变量已经存在');}
     End;
  Except
  On E: Exception do
     Begin
     T_Reg.Free;
     ShowMessage('Error: ' + E.Message);
     Exit;
     End;
  End;{结速 Try}
T_Reg.Free;
End;
{Delphi 2009 + Windows XP 测试通过}
{感谢BBS.2CCC.COM bahamut8348 (leonna),感谢CSDN belllab,}
{特别感谢 CSDN onebigday}
----------------------------------------------
我是 Delphi 菜菜鸟,我是样样通,样样松...
作者:
男 75557032 (纯蓝犹豫) ★☆☆☆☆ -
普通会员
2012/8/30 8:42:12
1楼: 嘿嘿,前几天不在,这个我可要提醒你啊,你要是是动态加载bpl,这个可以,但是多此一举,因为你可以指定位置,你要是静态加载,这段还没执行,先报找不到的错误。按此在新窗口浏览图片
----------------------------------------------
我就像是一块砖,那里需要那里搬。
作者:
男 hugu (Delphi菜菜鸟) ★☆☆☆☆ -
普通会员
2012/8/30 16:51:00
2楼: 75557032 (纯蓝犹豫) 呵,师傅别人帮我解决BPL的动态加载了,你说的这段我明白,静太的要先找BPL了在行执程序,我记下了,谢谢哦.
这段我加到我的程序里的,不过不是这个样子了,我做了简单修改.

提取路径
PR_CustomBPLPath :=PR_INI.ReadString('Paths','CustomBPL','System\CustomBPL');{程序Custom BPL路径}
PR_DelphiBPLPath :=PR_INI.ReadString('Paths','DelphiBPL','System\DelphiBPL');{系统Delphi BPL路径}

载入路径函数
{设置Windows环境变量Path 用户搜索 DLL 或 BPL等}
PR_SetEnvPath(ExtractFilePath(Application.ExeName)+PR_CustomBPLPath);{自定义添加环境变量函数 添加 自定义BPL}
PR_SetEnvPath(ExtractFilePath(Application.ExeName)+PR_DelphiBPLPath);{自定义添加环境变量函数 添加 Delphi BPL}

函数
{*** 自定义 PU_SetEnvPath 函数 **********}
Function TPDAForm.PR_SetEnvPath(ParameterOption:String) : Boolean; {设置Windows环境变量Path 用户搜索 DLL 或 BPL等}

我把路径放在Config.INI中了.可以随意修改.
----------------------------------------------
我是 Delphi 菜菜鸟,我是样样通,样样松...
作者:
男 liangcc01 (laig) ▲▲▲△△ -
普通会员
2018/3/15 19:59:36
3楼: 麻烦请问下,我目前也遇到这个问题,exe主程序是带包编译的,但是bpl的环境变量是否应该是运行exe之前设置好,如果在exe程序dpr中运行SetEnvPath应该是不起作用的吧?
----------------------------------------------
-
作者:
男 bigboy2050 (bigboy2050) ★☆☆☆☆ -
普通会员
2018/3/20 8:59:37
4楼: 顶。。。
----------------------------------------------
kittyapp
作者:
男 roker (roker) ★☆☆☆☆ -
盒子活跃会员
2018/3/20 16:22:28
5楼: to liangcc01:
做一个不带包的启动器,用来启动主程序.这样路径什么的都没问题了,也不用改注册表
----------------------------------------------
-
作者:
男 hnxxcxg (咏南中间件) ★☆☆☆☆ -
盒子活跃会员
2018/3/21 11:31:00
6楼: 将*.BPL所在路径添加进系统PATH,这样加载BPL就不会找不到路径?想法看起来很好啊。但事实上加载BPL之前,你就已经知道了它的路径所在,不是吗?对于已经知道的路径,加载BPL的时候指定一下就行。
关于编码——哪怕能少写一个字母,就绝不多写它一个。
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行74.21875毫秒 RSS