|
|
导航: |
论坛 -> 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 菜菜鸟,我是样样通,样样松... |
作者: |
|
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 菜菜鸟,我是样样通,样样松...
|
作者: |
|
2018/3/15 19:59:36 |
3楼: |
麻烦请问下,我目前也遇到这个问题,exe主程序是带包编译的,但是bpl的环境变量是否应该是运行exe之前设置好,如果在exe程序dpr中运行SetEnvPath应该是不起作用的吧?
----------------------------------------------
-
|
作者: |
|
2018/3/20 8:59:37 |
4楼: |
顶。。。
----------------------------------------------
kittyapp
|
作者: |
roker (roker) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2018/3/20 16:22:28 |
5楼: |
to liangcc01: 做一个不带包的启动器,用来启动主程序.这样路径什么的都没问题了,也不用改注册表
----------------------------------------------
-
|
作者: |
|
2018/3/21 11:31:00 |
6楼: |
将*.BPL所在路径添加进系统PATH,这样加载BPL就不会找不到路径?想法看起来很好啊。但事实上加载BPL之前,你就已经知道了它的路径所在,不是吗?对于已经知道的路径,加载BPL的时候指定一下就行。 关于编码——哪怕能少写一个字母,就绝不多写它一个。
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
|
|