OpenFileDialog.DereferenceLinks 不工作

OpenFileDialog.DereferenceLinks not working

我想从它的快捷方式中获取 exe 的目标路径。这对于 DereferenceLinks 来说似乎很简单,但它不起作用。我什至尝试 Path.GetDirectoryName 并检查 DereferenceLinks 是否与 ShowDialog() 一起为真。

OpenFileDialog o = new OpenFileDialog();
o.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
o.Title = "Select the game's exe file or shortcut file";
o.Filter = "Executable or Shortcut (*.exe, *.lnk) | *.exe; *.lnk";
o.DereferenceLinks = true;
if ((bool)o.ShowDialog() && o.DereferenceLinks == true)
{
    Debug.WriteLine("o.SafeFileName: " + o.SafeFileName);
    Debug.WriteLine("o.FileName: " + o.FileName);
    Debug.WriteLine("Path.GetDirectoryName(o.SafeFileName): " + Path.GetDirectoryName(o.SafeFileName));
    Debug.WriteLine("Path.GetDirectoryName(o.FileName): " + Path.GetDirectoryName(o.FileName));
}

还不能 post 图片,所以这是在桌面上选择游戏快捷方式后的调试输出。游戏的exe文件不在桌面,文件名显然还在引用lnk文件。

我做错了什么?我是不是不明白 DereferenceLinks 的用途?

你没有取消引用文件名的原因是 *.lnk 文件有一个明确的过滤器。
因此,如果您从过滤器中删除 *.lnk,您仍然会获得 exe 文件的快捷方式文件,并且 FileName 将 return 成为快捷方式文件的目标。

o.Filter = "Executable or Shortcut (*.exe, *.lnk) | *.exe";