4

在我的应用程序中,我定义了以下内容:

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

我可以在我的 Win7 机器上的运行命令中输入 NOTEPAD 的文本值,然后记事本就会打开。

但是,在我的 Visual Studio C# 项目中,Write Line 例程每次都会触发:

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

Visual Studio 不明白%windir%吗?

4

4 回答 4

4

与其按照迄今为止其他答案的建议手动扩展变量,不如让 Environment 类为您执行此操作,就像Run命令一样:

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

请参阅http://msdn.microsoft.com/en-us/library/system.environment.expandenvironmentvariables.aspx

于 2010-06-25T19:20:01.570 回答
2

在我的 windows XP 盒子上查看时,记事本的位置是:

%SystemRoot%\system32\notepad.exe

不是:

%windir%\notepad.exe

您还需要确保正确解析这些环境变量 - 使用Environment.GetEnvironmentVariablePath.Combine构建正确的路径:

string root = Environment.GetEnvironmentVariable("SystemRoot");
string path = Path.Combine(root, "system32", "notepad.exe");
于 2010-06-25T19:08:30.790 回答
1

仔细看看类环境。环境变量是 SystemRoot,因此您可以使用 Environment.GetEnvironmentVariable("windir") (或类似的东西)

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

控制台将 %windir% 环境变量“解析”到正确的路径。您需要使用上述功能在您的应用程序中执行相同的操作。

于 2010-06-25T19:08:21.650 回答
1

使用Environment.GetEnvironmentVariable("windir")

所以你可以这样声明:

public static readonly string NOTEPAD = Environment.GetEnvironmentVariable("windir") + "\\notepad.exe";
于 2010-06-25T19:09:04.097 回答