C# 获取Windows SDK工具的完整路径

C# 获取Windows SDK工具的完整路径,c#,C#,如何获取应用程序的完整路径?例如,我想获得windiff的路径: C:\Program Files\Microsoft SDK\Windows\v7.0A\bin\WinDiff.Exe 我期望的结果是: C:\Program Files\Microsoft SDK\Windows\v7.0A\bin 我试过了,但没用 string fileName = "windiff.exe"; FileInfo f = new FileInfo(fileName);

如何获取应用程序的完整路径?例如,我想获得windiff的路径:

C:\Program Files\Microsoft SDK\Windows\v7.0A\bin\WinDiff.Exe

我期望的结果是:

C:\Program Files\Microsoft SDK\Windows\v7.0A\bin

我试过了,但没用

        string fileName = "windiff.exe";
        FileInfo f = new FileInfo(fileName);
        MessageBox.Show(f.FullName.ToString());

FileInfo
不会在硬盘上的某个地方神奇地为您找到WinDiff.exe。它是一个实用程序类,它“为文件的创建、复制、删除、移动和打开提供属性和实例方法”()

您必须让用户浏览该文件或通过编程方式搜索硬盘驱动器来查找该文件

下面是一个如何遍历目录树的示例:


然而,要注意,并不是所有用户都喜欢/信任一个程序,它会在未经通知的情况下通过他们的硬盘进行非法访问

如果需要在某个位置查找文件,可以使用以下代码:

DirectoryInfo di = new DirectoryInfo(@"C:\");
FileInfo[] files = di.GetFiles("WinDiff.Exe", SearchOption.AllDirectories);
文件
数组将包含找到的文件。然后可以使用
DirectoryName
属性获取每个文件的文件夹


不过警告:特别是在C:\drive上使用这种方式时,某些文件夹将无法访问。您应该缩小搜索范围。

请参阅其他答案,以获取有关递归枚举目录以查找“windiff.exe”的帮助。还请记住,您可能会发现多个点击,因此您需要一些逻辑来处理这一点

这里更高层次的问题似乎是需要向用户显示两个文件的差异

我会在我的应用程序中附带一个默认的diff工具,而不是在安装了windowsdk的驱动器上查找它,假设它已经安装了。这是我默认使用的工具。您可以自己编写一个,也可以与律师合作:-],包括一个开源工具


您还可以为用户提供一个选项来配置他们最喜欢的diff工具。这是许多人采取的方法。

Windows SDK的安装文件夹设置在注册表中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A\InstallationFolder
例如,您可以通过将v7.1A更改为v8.0A来检查Windows SDK的多个版本

这是我用来访问文件夹的代码:

        var sdkRootPath = Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1A", "InstallationFolder", null) as string;
        if (null == sdkRootPath)
            throw new InvalidOperationException("Could not find Windows SDK 7.1A installation folder.");

        return sdkRootPath;

如果您不知道路径,如何获取
FileInfo
?如果你知道路径,你不需要做所有这些。我只想得到一个名为windiff.exe的应用程序的路径,因为用户不知道它在哪里。你实际上需要搜索它,遍历文件夹并匹配名称。这是你想要的吗?我觉得这里还有一些事情需要理解。你为什么需要这些信息?你打算用它做什么?如果我们知道问题是什么,可能有更好的方法来解决更高级别的问题。@c45207我需要这些信息,因为windiff.exe总是可能被放在不同的文件夹中,具体取决于用户的文件夹。我正在比较两个文件,当双击鼠标事件发生时,windiff将运行并比较这些文件。感谢扫描文件夹不是一个好主意。请参见Microsoft.Build.Utilities.ToolLocationHelper类以获取精确路径