文件关联如何填充 ProgId 和 ApplicationName

nls*_*k01 5 c# windows powershell

下面的 ProgId 和 ApplicationName 来自哪里?如何查询这些特定字段以制作我自己的文件关联 xml 文件?

您可以通过运行获取此文件

Dism.exe /online /Export-DefaultAppAssociations:C:\Temp\DefaultApps.xml


  <Association Identifier=".html" ProgId="ChromeHtml" ApplicationName="Google Chrome" />
  <Association Identifier=".ico" ProgId="PBrush" ApplicationName="Paint" />
  <Association Identifier=".md" ProgId="Applications\notepad.exe" ApplicationName="Notepad" />
Run Code Online (Sandbox Code Playgroud)

例如什么是“ChromeHtml”?我在哪里可以检索这个 ProgId?

什么是“应用程序\notepad.exe”?<----这也不是我可以导航的路径。notepad.exe不是system32吗?

And*_*ers 5

在这种情况下的ProgId

Shell 使用编程标识符 (ProgID) 注册表子项将文件类型与应用程序相关联,并控制关联的行为。用于文件关联的 ProgID 条目位于注册表中的 HKEY_CLASSES_ROOT 下。

“ChromeHtml”是由 Google Chrome 开发人员创建的 ProgID。当您选择 Chrome 作为默认浏览器时,.html 文件注册会更改(由 Chrome 或 Windows 更改,具体取决于您的 Windows 版本),以便它指向 ChromeHtml ProgID。ProgID 包含有关双击文件时要启动的应用程序的信息。

“PBrush”是 Microsoft 创建的 ProgID。

然而,“Applications\notepad.exe”不是 Microsoft 专门创建的 ProgID,它是对没有真正 ProgId 的应用程序使用“打开方式”功能的结果。它不是文件路径,它HKEY_CLASSES_ROOT\Applications在注册表中。

参与默认程序的应用程序功能的下面注册HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications并引导您到他们的 Capabilities 键,其中它们的类型与 ProgID 一起列出。其他应用程序只有一个App Paths 注册,有些应用程序除了直接在 HKEY_CLASSES_ROOT 中使用它们的文件扩展名和 ProgID 之外没有在任何地方注册。

某些应用程序在其注册中使用“ApplicationName”条目,但据我所知,此值未记录在案,您可能希望改为调用类似的方法AssocQueryString(ASSOCF_INIT_BYEXENAME, ASSOCSTR_FRIENDLYAPPNAME, ...)