获取Windows SDK工具的完整路径

时间:2013-12-02 01:40:35

标签: c#

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

  

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

我想要的结果是:

  

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

我尝试了这个,但是不行。

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

4 个答案:

答案 0 :(得分:1)

FileInfo不会在硬盘驱动器上的某个地方神奇地找到WinDiff.exe。它是一个实用工具类'提供用于创建,复制,删除,移动和打开文件的属性和实例方法'(http://msdn.microsoft.com/en-us/library/system.io.fileinfo(v=vs.110).aspx

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

以下是如何遍历目录树的示例: http://msdn.microsoft.com/en-us/library/bb513869.aspx

但是,请注意,并非所有用户都欣赏/信任一个未经宣布的硬盘驱动程序!

答案 1 :(得分:1)

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

这里的高级问题似乎需要向用户显示两个文件的差异。

我会通过运送我的应用程序的默认差异工具来解决这个问题,而不是尝试在安装它的任何驱动器上找到Windows SDK,假设它已经安装完毕。这是我默认使用的工具。你可以自己写一个,也可以和律师一起工作: - ],包括一个开源工具。

您还可以为用户提供配置其喜爱的差异工具的选项。这是许多source control systems采用的方法。

答案 2 :(得分:1)

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;

答案 3 :(得分:0)

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

DirectoryInfo di = new DirectoryInfo(@"C:\");
FileInfo[] files = di.GetFiles("WinDiff.Exe", SearchOption.AllDirectories);
然后

files数组将包含找到的文件。然后,您可以使用DirectoryName属性获取每个文件的文件夹。

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