话题1303905的标题是: SetEnvironmentVariable??? (100分)
分类:系统相关 刘芳 (2002-09-03 15:28:00)
想把自己应用程序的路径加到环境变量Path中,下面的语句没有报错,可就是不生效?
if (SetEnvironmentVariable('Path', PChar(ExtractFilePath(application.ExeName)))
<> true) then
showmessage(SysErrorMessage(GetLastError()));
darnis (2002-09-03 15:51:00)
你那个调用应该已经成功了。
SetEnvironmentVariable 设置的只是你当前应用的环境变量。
不信,你随后调用。
GetEnvironmentVariable 来看你的环境变量已经设置成了你的应用的。
var
v: Pchar;
begin
getMem(v,255);
try
if (SetEnvironmentVariable('Path', PChar(ExtractFilePath(application.ExeName)))
<> true) then
showmessage(SysErrorMessage(GetLastError()));
GetEnvironmentVariable('Path',v,255);
showmessage(v);
finally
freemem(v);
end;
end;
这是WIN32 Programmer's Reference 的说明的。
The SetEnvironmentVariable function sets the value of
an environment variable for the current process.
刘芳 (2002-09-03 15:57:00)
那我如何才能把它保存下来呢?
darnis (2002-09-03 16:08:00)
你的要求 ,我不知道怎么实现,,
在WIN32 Programmer's Reference里可以找到 SetEnvVariable 正是可以实现你的要求的
API,但是确不知道该引用哪个单元,,
在DFW里搜索到一个相关主题:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1136142
结果是,Delphi 不支持 SetEnvVariable ,
另人失望。 你看看那个主题文章对你有没有帮助。。
darnis (2002-09-03 16:25:00)
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1242554
讨论得更详细一些。
twos (2002-09-03 17:49:00)
procedure SetGlobalEnvironment(const Name, Value: string);
var
R
WORD;
begin
with TRegistry.Createdo
try
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('System/CurrentControlSet/Control/Session Manager/Environment',True) then
begin
WriteString(Name,Value);
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,Integer(Pchar('Environment')));
end;
finally
Free
end;
end;
zhaqiong (2002-10-11 12:27:00)
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1341056
刘芳 (2002-10-12 13:21:00)
谢谢 zhaqiong Oracle 全部搞定!
twos-60,zhaqiong-40,的回答最终被接受。