对于我们的应用程序,我们有一个自定义uri处理程序,它允许从外部源(即app://viewProduct/225545568
)打开应用程序内的一些视图
这种工作正常,当这样的链接粘贴在电子邮件中时,Outlook不会将其转换为"可点击的"链接。
HKEY_CURRENT_USER\Software\Classes\app
下注册了URI-Handler,因此从WIN + R调用它会使应用程序完美无缺。 有没有办法让Outlook能够理解(注册)URI以自动将它们变成HyperLinks
? (或者我们是否需要部署某种公司范围的宏来实现这一目标?)
答案 0 :(得分:0)
这是一个非常好的解决方法:
我还在寻找一个合适的解决方案,只是想离开这个地方"在这里"已经。
经过一番研究,我发现Outlook默认链接了一定数量的"协议" (硬编码):所以我试图注册"我的"使用mms
协议的应用程序,这是我们在商业环境中不需要的。
首次尝试删除,仅适用于Windows 7
所以我玩了一下,并想通了,Windows 7和Windows 10需要以下密钥才能让事情顺利进行。
注意:对于Windows 10,这只会"注册"您的应用程序作为协议的合适默认应用程序。您必须使用" Windows 10的默认应用程序 - >手动分配应用程序。按协议" -Menu。 (只要这适用于Chrome - 因此Google-Devs没有解决方法 - 我不会在此花费任何时间:P)
好消息:在任何系统上设置所有键并不会导致任何问题。 (所以,让我们忽略一点注册表污染:-))
自担风险 - 我的测试是在一个非常狭隘的环境中进行的。
将Config.MyApplicationURLHandler
替换为您的可执行文件,即C:\Path\To\Executable %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_USER\Software\Policies\Microsoft\Office\16.0\Common\Security\Trusted Protocols\All Applications\mms:
如果某些密钥不存在,只需创建它们。
请勿忘记清理应用程序中的输入,因为我们不想处理使用mms
协议的真实内容。 : - )