How
To Adjust Environment Variables
by Charlie Marlin
This post is similar to a post by Joey Rogers on
Friday, February 11, 2011. It has slight
differences in language and syntax, but I thought I should share it just the
same. Windows 7 installations should also see the “Fly in
Ointment” note at the end.
Sometimes you need to change a system variable for a section of code. Where I work, we have some Oracle databases on the 11g version and some on version 8. They reside on different servers. When we want to use one, it often works fine. If we need to use the other, we have to edit the PATH variable on our machines to move the reference to the unwanted Oracle version further down the path than the desired version. I have lived with this limitation for years, hoping the old database would get upgraded, but last week I was placed in a situation of telling a user who does not have admin credentials that will allow him to edit the environment variables to use one laptop for one thing and another laptop for the other. Embarrassing. So I groped around and found this, tested it, delivered it to the user, and to my astonishment it worked.
(Let’s name the old Oracle 8 server “Aristophanes”
and the more modern Oracle 11g server “Moliere”. In the code before I need
“C:\ORANT\BIN:” not to come before the home for Oracle 11g I place this code:)
' First, we
need to change the PATH environment variable in order to reach Moliere...
Dim
oraclePathAristophanes As String = Environment.GetEnvironmentVariable("path")
Dim
oraclePathMoliere As String
= oraclePathAristophanes
oraclePathMoliere =
oraclePathAristophanes.Replace("C:\ORANT\BIN;",
"")
'MessageBox.Show("Oracle
PATH edited: " & vbCrLf & oraclePathMoliere)
Environment.SetEnvironmentVariable("path", oraclePathMoliere)
' restore
oraclePathAristophanes further down once we are done with Moliere...
'MessageBox.Show("Oracle PATH set: " & vbCrLf
& Environment.GetEnvironmentVariable("path"))
(then later in the sub I restore the old path
variable)
' restore
oraclePathAristophanes once we are done with Moliere...
Environment.SetEnvironmentVariable("path", oraclePathAristophanes)
'MessageBox.Show("Oracle PATH restored: " &
vbCrLf & Environment.GetEnvironmentVariable("path"))
Fly
in Ointment
This approach fails on Windows 7 for non-admin users,
but the following article lets you step over that obstacle: http://williamfaulkner.co.uk/2009/04/vbnet-run-as-administrator-impersonate-a-user-2008/