Marcos Douglas wrote 48 lines
On Wed, Mar 28, 2012 at 6:40 PM, Michael Van Canneyt
wrote:
>
>
>
> On Wed, 28 Mar 2012, Marcos Douglas wrote:
>
>> Hi,
>>
>> I think SysUtils.GetEnvironmentVariable has a problem.
>> I tried to use GetEnvironmentVariable on WinXP and Win7. Sometimes
>> works on WinXP, others not. But never worked on Win7.
>>
>> I asked some friends to test on Linux and did not work too.
>>
>> My FPC is 2.6.1 rev 20648 on WinXP.
>>
>> The test:
>> 1- Create a Environment Variable (eg: FOO).
>> 2- Try this:
>>
>> procedure TForm1.Button1Click(Sender: TObject);
>> begin
>> ShowMessage(SysUtils.GetEnvironmentVariable('FOO'));
>> end;
>>
>
> Just tested.
>
> Works fine on linux, provided the environment variable is defined BEFORE
> the program is started, and in the terminal that starts the program.
> (perfectly normal on linux)
>
> So if you run the program under the IDE, the environment variable must be
> defined in the session that starts the IDE, BEFORE the ide is started.
>
> Cannot comment on Windows, but I would be very surprised if it does not
> work, since many of our programs rely on it.
>
> There again, be careful WHEN you define the environment variable. Before
> or after starting the application.
I know that I have to define the environment variable before or after
starting the application or IDE.
As I said, works in WinXP... but I had a little problem with a client
using Win7 so, I talked about this on lazarus-br list and asked to
somebody do the test on Win7 and they said the test did not work so, I
wrote here.
You could use Process Explorer to inspect the Environment of your process.
That being said I just tested the following program:
=== source begin ===
program envtest;
uses
SysUtils;
var
i: LongInt;
begin
if ParamCount = 0 then
Writeln('Usage: ', ExtractFileName(ParamStr(0)), ' ENVVAR [ENVVAR
[...]]')
else begin
for i := 1 to ParamCount do
Writeln(ParamStr(i), ' = ', GetEnvironmentVariable(ParamStr(i)));
end;
end.
=== source end ===
I tested it in a CMD session on a Windows 7:
=== output begin ===
P:\tests\oneshots>set FOO=bar
P:\tests\oneshots>.\envtest.exe FOO
FOO = bar
=== output end ===
Please note that in "cmd" the following are different:
set FOO=bar
=> "FOO" -> "bar"
set FOO = bar
=> "FOO " -> " bar"
set FOO= bar
=> "FOO" -> " bar"
set FOO =bar
=> "FOO " -> "bar"
Regards,
Sven