1

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

编辑:

对不起,澄清:

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

例子:

用户打开文件“file.txt”我希望我的程序能够说“extension = .txt Default program = notepad.exe”

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

(例如:.txt 有 3 个文件夹,一个名为 ShellNew 的文件夹有一个名为 itemName 的值,它指定 notepad.exe,.cpp 有两个文件夹但没有一个名为 ShellNew,但基本文件夹有一个名为 default 的值,上面写着“VisualStudio .cpp.11.0" 但它没有指定 exe 文件或任何东西)

4

1 回答 1

0

我不太清楚您的问题,如果可以的话,您能否添加一些代码或至少在可能的情况下扩展您的问题。我敢打赌,它会帮助社区以更相关的答案做出回应。

如果您试图从注册表中提取值,请使用RegistryKey作品。

RegistryKey reg1 = new Registry.ClassesRoot;
string[] values1 = reg1.OpenSubKey("txtfile").GetValueNames();

将为您提供所持有值的名称。我不完全明白你想表达什么,但为了更好地说明。

object InstallationDirectory = reg.OpenSubKey(RegistryEntryPath).GetValue("Client Installation Directory");

将返回您指定的程序安装路径。这可能会让你走上正确的轨道。

编辑:

在阅读了您编辑的帖子后,我做了一些研究,看起来 FriendlyTypeName 是您可能正在寻找的东西。

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

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

于 2013-08-09T16:37:59.027 回答