Am 29.03.2012 05:31, schrieb Marcos Douglas:
On Wed, Mar 28, 2012 at 6:40 PM, Michael Van Canneyt
<mich...@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
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to