[fpc-pascal] SysUtils.GetEnvironmentVariable

Marcos Douglas md at delfire.net
Thu Mar 29 13:06:53 CEST 2012


On Thu, Mar 29, 2012 at 4:17 AM, Sven Barth <pascaldragon at googlemail.com> wrote:
>
> Am 29.03.2012 05:31, schrieb Marcos Douglas:
>
>> On Wed, Mar 28, 2012 at 6:40 PM, Michael Van Canneyt
>> <michael at freepascal.org>  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

The application is installed and the system variable is created. The
application and others process should be use this variable just
calling SysUtils.GetEnvironmentVariable.

Marcos Douglas



More information about the fpc-pascal mailing list