C#Directory.GetCurrentDirectory和C以外的驱动器:

时间:2010-08-22 22:56:46

标签: c#

由于某种原因,当我的程序安装在C:\以外的驱动器上时,下面的代码(c#.net 2.0)无法找到并运行program2.exe。我在这里做错了吗?

try
{
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = Directory.GetCurrentDirectory() +
                              "\\Folder\\program2.exe";
    proc.Start();
}
catch
{
    MessageBox.Show("Unable to locate program");
}

1 个答案:

答案 0 :(得分:3)

可能是因为您的程序位于另一个驱动器的根文件夹中,例如R:\,而非子目录,例如R:\Program

由于这种原因,在C#中使用文字反斜杠字符连接路径被认为是不好的做法。相反,您应该使用Path.Combine

proc.StartInfo.FileName = Path.Combine(
    Directory.GetCurrentDirectory(),
    "Folder",
    "program2.exe"
);

此外,Directory.GetCurrentDirectory()可能不指向您认为的目录。通常,这可能会返回系统上的任何目录,并且与程序所在或启动的位置无关。因此,我建议使用其中之一:

  • 如果您使用的是WinForms,Application.ExecutablePath
  • 否则,Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)