Windows - std.process - Setting env variables from D
Laeeth Isharc via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Mar 30 07:14:48 PDT 2015
On Monday, 30 March 2015 at 13:29:06 UTC, wobbles wrote:
> On Monday, 30 March 2015 at 12:54:28 UTC, Adam D. Ruppe wrote:
>> On Monday, 30 March 2015 at 12:28:19 UTC, wobbles wrote:
>>> Any solutions that people know of?
>>
>> You can't from an exe, it is a limitation of the operating
>> system (same on Linux btw, environment variable inheritance is
>> always from parent to child, never from child to parent). The
>> reason batch files can do it is that they don't run in a
>> separate process, they just run a batch of commands inside the
>> shell itself.
>>
>> https://msdn.microsoft.com/en-us/library/windows/desktop/ms682009%28v=vs.85%29.aspx
>>
>> "Altering the environment variables of a child process during
>> process creation is the only way one process can directly
>> change the environment variables of another process. A process
>> can never directly change the environment variables of another
>> process that is not a child of that process."
>>
>> If you're an administrator, you could poke the system-wide
>> variables in the registry and tell the processes to reload
>> them:
>> https://msdn.microsoft.com/en-us/library/windows/desktop/ms682653%28v=vs.85%29.aspx
>>
>> but of course, changing system-wide registry entries affects
>> way more than just your parent shell!
>>
>>
>>
>> If you need to change a parent shell variable, the only way is
>> to do it from a batch file. You could perhaps run a .bat which
>> sets the variable and calls your exe to help it do some work.
> Thanks Adam,
>
> Yeah, I knew it was the case in Linux, I just figured as 'set'
> worked in a batch file that it must be possible in Windows.
>
> I think what I'm going to do is have my D program output the
> commands as strings that are required to set the ENV variables
> in the parent and then have a batch file to run the program,
> get its output and run the commands outputted from the D
> program.
> Can also have a bash file to do the same (using the source
> command).
>
> This is for setting up a build system we're using, and is
> normally run via Jenkins, so running it in a kind of ugly way
> doesnt really matter.
>
> We're currently maintaining two seperate scripts to do this
> work, I'm trying to consolidate them. Maintaining one large-ish
> D script to do this work and 2 mini scripts to call them should
> be easier to maintain than 2 large bash/batch scripts.
>
> Thanks!
You tried setx, and it didn't work ? Or you don't want to set
permanent environmental variables ?
More information about the Digitalmars-d-learn
mailing list