我正在编写一个可以处理mailto:protocol的程序。为了允许用户选择我的程序作为默认的电子邮件处理程序,我注册了我的程序。但是,我注意到一些程序显示公司名称下的公司网站的可点击链接,例如文件资源管理器。
如何指定指向我网站的链接,以便默认程序用户界面在选择我的应用时显示该链接?
我使用的是Microsoft Visual Studio 2013终极版。这是我的.reg格式的程序注册详细信息:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications]
"MyMail"="SOFTWARE\\MyFirm\\MyApp\\Capabilities"
[HKEY_LOCAL_MACHINE\SOFTWARE\MyFirm\MyApp\Capabilities]
"ApplicationDescription"="This is an awesome description."
"ApplicationName"="Awesome App"
[HKEY_LOCAL_MACHINE\SOFTWARE\MyFirm\MyApp\Capabilities\URLAssociations]
"mailto"="mailto.2"
[HKEY_CLASSES_ROOT\mailto.2]
@="URL:MailTo Protocol"
"EditFlags"=dword:00000002
"FriendlyTypeName"="My Mail Client"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\mailto.2\shell\open\command]
@="\"C:\\bg\\awesome.exe\" \"%l\""
以下是文件资源管理器的可点击链接示例。
这是我的应用程序没有链接
这是我到目前为止所发现的:
并非所有应用都显示此链接。
Microsoft和非Microsoft应用都可以显示此链接,例如,讯连科技PowerDVD显示指向www.cyberlink.com的链接。
并非所有Microsoft应用都显示该链接,而显示该链接的应用可能具有不同的URL。例如,Microsoft Corporation的三个应用程序:Paint - 无链接,照片库 - http://www.microsoft.com,Visual Studio 2013 - http://microsoft.com(无www)。
Skype for Desktop显示公司Skype Technologies S.A.以及指向http://www.microsoft.com的链接。
链接地址似乎不存储在注册表中。它存储在shell \ open \ command下列出的可执行文件中。
它似乎不会作为资源存储在可执行文件中。
strings tool from sysinternals在可执行文件中找不到链接地址。
答案 0 :(得分:0)
默认程序中程序和公司名称下显示的URL作为经过身份验证的属性1.3.6.1.4.1.311.2.1.12存储在数字签名中。
设置此值的一种方法是使用Visual Studio命令提示符中的signtool。 URL是/du
参数之后的值,例如:
signtool sign /s My /n "RegmagiK Software" /du "http://www.RegmagiK.com" awesome.exe
证书必须由受信任的证书颁发机构签名。
为了进行测试,可以使用makecert工具创建自签名证书,并使用证书管理器使其受信任。
makecert -r -ss My -sr CurrentUser -n "CN=RegmagiK Software" SelfSigned.cer
certmgr.exe /add SelfSigned.cer /s /r currentUser root
签署可执行文件后,重新打开默认程序并单击您的应用程序。它现在应该显示您网站的链接。