Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

PATH environment variable

0 views
Skip to first unread message

anon...@discussions.microsoft.com

unread,
Nov 1, 2004, 2:11:39 PM11/1/04
to
Hi all, I am trying to append a certain string to the
PATH environment variable programmatically. I am able to
read what is in the variable using the System.Environment
method GetEnvironmentVariable("path"). However, I don't
know yet how to append strings to the path variable. Any
help is appreciated. Thanks a lot.

Nicholas Paldino [.NET/C# MVP]

unread,
Nov 1, 2004, 2:23:22 PM11/1/04
to
There is no managed way to set the environment variable strings.
Rather, you will have to call the SetEnvironmentVariable function through
the P/Invoke layer.

If you are using .NET 2.0, then you can use the static
SetEnvironmentVariable method on the Environment class.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- m...@spam.guard.caspershouse.com

<anon...@discussions.microsoft.com> wrote in message
news:324a01c4c046$9d78f450$a301...@phx.gbl...

Julie

unread,
Nov 1, 2004, 2:28:25 PM11/1/04
to

Many ways.

One is to do the following:

string path = @"%PATH%\subfolder\yourapplication.exe";
string expanded = System.Environment.ExpandEnvironmentVairables(path);

Other way:

string expanded = System.Environment.GetEnvironmentVariable("path") +
@"\subfolder\yourapplication.exe";

anon...@discussions.microsoft.com

unread,
Nov 1, 2004, 2:29:36 PM11/1/04
to
Thanks for your reply Nicholas. Can you explain how we
can call the SetEnvironmentVariable through the P/Invoke
layer? Thanks a lot in advance.
>.
>

Evan

unread,
Dec 6, 2004, 7:11:01 PM12/6/04
to
If you want to change the parent (system) path environment, here is how I did
it:

// Import library used to broadcast a system message that the environment
changed.
[DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg,
UIntPtr wParam, string lParam, SendMessageTimeoutFlags fuFlags,
uint uTimeout, out UIntPtr lpdwResult);

public static string RegKey = @"System\CurrentControlSet\Control\Session
Manager\Environment";

public static string NewPathForFolder = "d:\bin";


public enum SendMessageTimeoutFlags:uint
{
SMTO_NORMAL= 0x0000
, SMTO_BLOCK = 0x0001
, SMTO_ABORTIFHUNG = 0x0002
, SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
}



private static void SetEnvironmentPath()
{
// Update registry with environment variable path
RegistryKey key;
key = Registry.LocalMachine.OpenSubKey(RegKey,true);
string path = (String)key.GetValue("Path");
string TestPath = NewPathForFolder;
int a = path.IndexOf(TestPath,1);
if (a == -1)
{
path += ";" + NewFolderForPath;
key.SetValue("Path", path);

//Notify all windows that User Environment variables are changed
IntPtr HWND_BROADCAST = (IntPtr) 0xffff;
const UInt32 WM_SETTINGCHANGE = 0x001A;
UIntPtr result;
IntPtr settingResult = SendMessageTimeout(HWND_BROADCAST,
WM_SETTINGCHANGE,
(UIntPtr)0,
"Environment",
SendMessageTimeoutFlags.SMTO_NORMAL,
10000,
out result);

0 new messages