C# C、 Visual studio 2012,查找运行特定扩展的默认程序

C# C、 Visual studio 2012,查找运行特定扩展的默认程序,c#,file,registry,file-extension,C#,File,Registry,File Extension,我正在为我正在制作的文件信息程序寻找一种方法,以检查哪些已安装的程序使用用户在运行时选择的特定扩展名,因为我发现同一扩展名可以被多个程序使用。我知道这与注册表中的HKEY_CLASSES_根文件夹有关,但我似乎找不到一个简单的方法来获取这些信息。有吗 编辑: 对不起,澄清: 我的程序将检查用户打开的文件的文件扩展名。我希望该程序能够检查计算机上安装的处理指定扩展的程序 例如: 用户打开文件file.txt我希望我的程序能够说扩展名=.txt默认程序=notepad.exe 我知道这些值保存在注册

我正在为我正在制作的文件信息程序寻找一种方法,以检查哪些已安装的程序使用用户在运行时选择的特定扩展名,因为我发现同一扩展名可以被多个程序使用。我知道这与注册表中的HKEY_CLASSES_根文件夹有关,但我似乎找不到一个简单的方法来获取这些信息。有吗

编辑:

对不起,澄清:

我的程序将检查用户打开的文件的文件扩展名。我希望该程序能够检查计算机上安装的处理指定扩展的程序

例如:

用户打开文件file.txt我希望我的程序能够说扩展名=.txt默认程序=notepad.exe

我知道这些值保存在注册表的HKEY_CLASSES_ROOT中,但每个扩展都有不同的文件夹和值。我无法编写一行代码来告诉程序在“n”点检查注册表,因为我找不到任何要遵循的默认文件夹层次结构


示例:.txt有3个文件夹,一个名为ShellNew的文件夹有一个名为itemName的值,该值指定notepad.exe,.cpp有两个文件夹,但没有一个名为ShellNew,但是基本文件夹有一个名为default的值,表示VisualStudio.cpp.11.0,但它没有指定exe文件或任何内容。我不太清楚您的问题,如果可以的话,您是否可以添加一些代码或至少用一个可能的场景扩展您的问题。我打赌这将有助于社区做出更相关的回答

如果您试图从注册表中提取值,那么使用RegistryKey是可行的

将为您获取所持有的值的名称。我不太明白你想说些什么,只是为了更好地说明

object InstallationDirectory = reg.OpenSubKey(RegistryEntryPath).GetValue("Client Installation Directory");
将返回程序的指定安装路径。这可能会让你走上正确的道路

编辑:

在阅读了你编辑的文章后,我做了一些研究,看起来FriendlyTypeName是你可能正在寻找的东西

object path = reg1.OpenSubKey("txtfile").GetValue("FriendlyTypeName");

它返回了这个字符串@C:\Windows\system32\notepad.exe,-469

谢谢!我补充了一些说明,我希望现在更好,你寻找的方向是什么?看起来不是这样。我的意思是,只要我想要一个txt文件,它就可以工作,但这似乎不适用于cpp文件,例如,它只是说对象引用没有设置为对象的实例。当我打开一个png文件时,它设置了一个指向dll文件的链接,所以很遗憾,这似乎不是解决方案。我只是用一个rtf文件检查了一下,它工作了,所以这种方法似乎更倾向于Windows本机扩展。
object path = reg1.OpenSubKey("txtfile").GetValue("FriendlyTypeName");