如何为电子应用程序设置 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 中记录的正常方式注册您的协会。
此外您还可以:
WinVista & Win7: 可以强行使用IApplicationAssociationRegistration
界面(不推荐)
Win8:询问用户是否要更改他们的关联,如果他们确认你可以调用IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI
.
Win10:调用 IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI
到 display a help-popup 指导用户如何更改他们的关联。
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
我创建了一个电子应用程序。 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 中记录的正常方式注册您的协会。
此外您还可以:
WinVista & Win7: 可以强行使用
IApplicationAssociationRegistration
界面(不推荐)Win8:询问用户是否要更改他们的关联,如果他们确认你可以调用
IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI
.Win10:调用
IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI
到 display a help-popup 指导用户如何更改他们的关联。
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