如何为电子应用程序设置 ProgId?

How can I set ProgId for an electron application?

我创建了一个电子应用程序。 Post Windows 8、设置一个应用程序为默认邮件客户端需要修改以下位置的注册表值:

Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\mailto\UserChoice

由于我正在使用 electron-builder 来构建我的应用程序并使用 nsis 目标作为 Windows,我在哪里可以为我的应用程序 create/set/view ProgId?如果可能,如何创建多个 ProgId

你不能像那样覆盖关联。

UserChoice(和 FileExts)键未记录,您不应该写信给它们。

因为人们 force themselves and ignore the issue of "What if two programs did this?" Microsoft 使得以编程方式设置 types/applications 的默认关联变得越来越困难。

如果您在最近版本的 Windows 中查看 UserChoice 键,您还会看到一个 Hash 值。如果 ProgId 值与哈希 Windows 不匹配,将忽略您接管关联的尝试。只有 ControlPanel/Settings UI 才能成功更改这些系统上的关联。

在企业环境中,您可以使用 DISM/GPO. Applications installed by normal users cannot do this, your only option is to follow the Microsoft guidelines:

以 HKEY_CLASSES_ROOT 中记录的正常方式注册您的协会。

此外您还可以:

LaunchAdvancedAssociationUI 可以像这样在 NSIS v3+ 中使用:

!include LogicLib.nsh
!include Win\COM.nsh
Section
!insertmacro ComHlpr_CreateInProcInstance ${CLSID_ApplicationAssociationRegistrationUI} ${IID_IApplicationAssociationRegistrationUI} r0 ""
${If} [=10=] P<> 0
    ${IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI} [=10=] '("Internet Explorer")' ; Replace with your registered application name
    ${IUnknown::Release} [=10=] ""
${EndIf}
SectionEnd