如何为电子应用设置ProgId?

时间:2018-10-29 13:53:19

标签: windows electron registry nsis electron-builder

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

计算机\ HKEY_CURRENT_USER \软件\ Microsoft \ Windows \ Shell \ Associations \ UrlAssociations \ mailto \ UserChoice

由于我正在使用电子构建器来构建我的应用程序,并且使用Windows的nsis目标,我可以在哪里为我的应用程序创建/设置/查看ProgId?如果可以的话,如何创建多个ProgId

1 个答案:

答案 0 :(得分:1)

您不能像这样覆盖关联。

UserChoice(和FileExts)键没有记录,您不应写它们。

由于人们force themselves忽略了“ What if two programs did this?”的问题,Microsoft使得以编程方式为类型/应用程序设置默认关联变得越来越困难。

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

在企业环境中,您可以使用DISM/GPO。普通用户安装的应用程序无法执行此操作,您唯一的选择是遵循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} $0 P<> 0
    ${IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI} $0 '("Internet Explorer")' ; Replace with your registered application name
    ${IUnknown::Release} $0 ""
${EndIf}
SectionEnd