Question

In my application, I have defined the following:

public static readonly string NOTEPAD = "%windir%\\notepad.exe";

I can type in the text value of NOTEPAD into the Run command on my Win7 machine, and Notepad will open.

However, from within my Visual Studio C# project, the Write Line routine will fire every time:

  if (!File.Exists(NOTEPAD)) {
    Console.WriteLine("File Not Found: " + NOTEPAD);
  }

Does Visual Studio not understand %windir%?

Was it helpful?

Solution

Instead of expanding the variable manually as suggested by the other answers so far, you can have the Environment class do this for you just like the Run command does:

if (!File.Exists(Environment.ExpandEnvironmentVariables(NOTEPAD))) {
  Console.WriteLine("File Not Found: " + NOTEPAD);
}

See http://msdn.microsoft.com/en-us/library/system.environment.expandenvironmentvariables.aspx

OTHER TIPS

When looking on my windows XP box, the location of notepad is:

%SystemRoot%\system32\notepad.exe

Not:

%windir%\notepad.exe

You also need to make sure that these environment variables are resolved correctly - use Environment.GetEnvironmentVariable and Path.Combine to build up the correct path:

string root = Environment.GetEnvironmentVariable("SystemRoot");
string path = Path.Combine(root, "system32", "notepad.exe");

Just have a closer Look at the Class Environment. The Environment Variable is SystemRoot, so you can use Environment.GetEnvironmentVariable("windir") (or something like that)

http://msdn.microsoft.com/en-us/library/system.environment.getenvironmentvariable.aspx

The console "Resolves" the %windir% environment variable to the correct path. You need to use the above function to do the same within your application.

Use Environment.GetEnvironmentVariable("windir");

So you could declare it like this:

public static readonly string NOTEPAD = Environment.GetEnvironmentVariable("windir") + "\\notepad.exe";
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top