自定义URI处理程序:Outlook集成?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义URI处理程序:Outlook集成?相关的知识,希望对你有一定的参考价值。
对于我们的应用程序,我们有一个自定义的uri处理程序,它允许从外部源(即app://viewProduct/225545568
)打开应用程序内的一些视图
这样工作正常,当这样的链接粘贴到电子邮件中时,Outlook不会将其转换为“可点击”链接。
- 我们在
HKEY_CURRENT_USERSoftwareClassesapp
下注册了URI-Handler,所以从WIN + R调用它会使应用程序完美无缺。
有没有办法,Outlook可以理解(注册)的URI将它们变成HyperLinks
a自动? (或者我们是否需要部署某种公司范围的宏来实现这一目标?)
这是一个非常好的解决方法:
我还在寻找一个合适的解决方案,只是想把这个“已经”留在这里了。
经过一些研究,我发现默认情况下Outlook链接了一定数量的“协议”(硬编码):所以我试图用mms
协议注册“我的”应用程序,我们在商业环境中不需要这样做。
删除首次尝试,仅适用于Windows 7
所以我玩了一下,并想出,Windows 7和Windows 10需要以下密钥才能让事情顺利进行。
注意:对于Windows 10,这只会将您的应用程序“注册”为协议的合适默认应用程序。您必须使用“Windows 10的默认应用程序 - >按协议”-Menu手动分配应用程序。 (只要这适用于Chrome - 所以Google-Devs没有解决方法 - 我不会在此花费任何时间:P)
好消息:在任何系统上设置所有密钥似乎都不会导致任何问题。 (所以让我们忽略一点注册表污染:-))
使用风险 - 我的测试在非常狭隘的环境中是积极的。
将Config.MyApplicationURLHandler
替换为您的可执行文件,即C:PathToExecutable %1
将MyApplication
替换为您的应用程序名称。
private void RegisterMyProtocol()
{
//Step 1: Register for the MMS-Protocol.
//Thats some media plaer stuff, we don't need at all.
//We use this, because it will be autolinked in Outlook / word / excel.
RegistryKey key = CreateRegistryChain(Registry.CurrentUser, "Software/CLASSES/mms");
key.SetValue(string.Empty, "URL:mms Protocol");
key.SetValue("URL Protocol", string.Empty);
key.Close();
key = CreateRegistryChain(Registry.CurrentUser, "Software/CLASSES/mms/shell/open/command");
key.SetValue(string.Empty, Config.MyApplicationURLHandler);
key.Close();
//Step 2: Create required entries for windows 10.
//NOTE: Win 10 Users need to select Uri-Schemes manually.
key = CreateRegistryChain(Registry.CurrentUser, "Software/CLASSES/mms/shell/open/command");
key.SetValue(string.Empty, Config.MyApplicationURLHandler);
key.Close();
key = CreateRegistryChain(Registry.CurrentUser, "Software/MyApplication/Capabilities");
key.SetValue("ApplicationDescription", "MyApplication");
key.SetValue("ApplicationName", "MyApplication");
key.Close();
key = CreateRegistryChain(Registry.CurrentUser, "Software/MyApplication/Capabilities/URLAssociations");
key.SetValue("mms", "mms");
key.Close();
key = CreateRegistryChain(Registry.CurrentUser, "SOFTWARE/RegisteredApplications");
key.SetValue("MyApplication", "Software\MyApplication\Capabilities");
key.Close();
//Step 3: Remove the original UrlAssociation.
key = CreateRegistryChain(Registry.CurrentUser, "SOFTWARE/Microsoft/Windows/Shell/Associations/UrlAssociations");
if (key.GetSubKeyNames().Contains("mms"))
{
key.DeleteSubKey("mms");
}
key.Close();
}
private RegistryKey CreateRegistryChain(RegistryKey root, String keyChain){
String[] keys = keyChain.Split('/');
foreach(String key in keys)
{
if (!root.GetSubKeyNames().Contains(key))
{
root.CreateSubKey(key, true);
}
root = root.OpenSubKey(key, true);
}
return root;
}
注意:默认情况下,mms-Protocol会导致Outlook显示安全警告。因此,要么通过GPO将协议添加到受信任的协议,要么使用注册表项:
(版本16.0需要与您的Outlook版本匹配)
HKEY_CURRENT_USERSoftwarePoliciesMicrosoftOffice16.0CommonSecurityTrusted ProtocolsAll Applicationsmms:
如果某些键不存在则只需创建它们。
不要忘记在应用程序中清理输入,因为我们不想处理使用mms
协议的真实内容。 :-)
以上是关于自定义URI处理程序:Outlook集成?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用自定义协议从 Android 浏览器打开 Microsoft Outlook 应用程序?