我正在尝试找出用于打开给定扩展名文件的可执行文件,以便在扩展名没有时显示该可执行文件的图标。
我知道该文件类型的 HKEY_CLASSES_ROOT 注册表项中的开放动词,但我发现它的值并不总是正确的。
例如,我目前在 OS X 上的 Parallels 中运行 Windows。PDF 文件的默认关联是 Safari。我通过资源管理器将默认关联更改为 Adobe Reader。注册表中的打开动词仍然是 Safari,但是当我双击 PDF 文件时,它会使用 Adobe Reader 打开。 32 位和 64 位注册表具有相同的值。
是否有更好的方法来检索文件类型的关联,无论是使用 .NET 还是 winapi?
最佳答案
您最好的选择可能是使用 Assoc*
函数组,例如 AssocQueryKey()
和 AssocQueryString()
via PInvoke .但是,我不知道 .NET Framework 附带的许多类中的一个是否已经为您包装了它。但是 Shell API 为您提供了检索此信息的选项。
另请注意备注部分,其中声明上述函数是 IQueryAssociations
的包装器接口(interface),这使您更有可能通过另一条更直接的途径从 .NET 中获得您想要的内容。
旧式函数是这个:FindExecutable()
.不过,不要使用它。它使用与 ShellExecute()
相同的有缺陷的错误代码魔法。
另请参阅 Windows: List and Launch applications associated with an extension 的答案
关于c# - 如何在 Windows 上正确检索与扩展关联的打开命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13461236/