如何在Windows 7上注册自定义程序来处理mailto协议

时间:2011-08-18 09:32:12

标签: windows registry protocol-handler

好吧,这可能是我系统的一个问题,但是我很难让Windows 7将我的自定义exe识别为mailto协议的默认处理程序。

首先,我看到了这个: Register Windows program with the mailto protocol programmatically

接下来,我看到了这些:

我添加了似乎相应的注册表项,但每次单击mailto链接时(无论是在浏览器中还是通过“运行”窗口),我仍然会出现Windows Live Mail。我为所有用户和当前用户设置了注册表项,但它仍然不起作用。

当我转到“默认程序”应用程序并向下滚动到mailto协议时,我只看到列出的Outlook和Windows Live Mail。我的自定义应用甚至没有出现。

我认为它对Windows 7来说是特别的东西,或者是我的电脑。

我的自定义应用是WinForms .Net应用,但我认为不重要。

非常欢迎任何想法。

4 个答案:

答案 0 :(得分:2)

您在问题中引用的the answer中描述的方式对于Windows 7而言似乎与其他操作系统一样正确。

我认为您使用的是64位版本的Windows 7,而您的程序是32位应用程序。因此,如果您的应用程序在HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto\shell\open\command密钥中写入,则它仅修改用于32位应用程序的密钥HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\mailto\shell\open\command。您可以阅读有关注册表虚拟化herehere的更多信息。

如果是您的情况,您可以使用RegOpenKeyEx标志直接调用本机Win32 API KEY_WOW64_64KEY,这将在32位操作系统上被忽略。

答案 1 :(得分:1)

虽然回答很晚,但对我来说有用的是:在注册表中,这取代了其他答案中提到的注册表项:

HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\URLAssociations\MAILTO\Userchoice

看看这个页面: Default Mailto Registry

答案 2 :(得分:0)

答案 3 :(得分:0)

对于一个相当常见的问题,这似乎是一个非常高级别的语境。作为一个书呆子,我在64 vs x86和.net的伪通用二进制方面的论述中被扫地出门。但是我的技术支持故障排除者不禁认为核心问题需要明确并系统地解决......

因此,您的真正问题是,无论您使用哪个邮件客户端(如您所说),并且无论您的CPU如何,都无法让您的邮件客户端成为mailto的默认协议处理程序。或者为了使它变得非常简单,你不能让你喜欢的程序成为默认程序。

我倾向于认为问题的64/86方面不相关。它们很有趣,并且可能有一些效果,但如果程序运行得很好(该架构中的代码没有问题等),如果它确实发送电子邮件(电子邮件发送和接收,所有SMTP和IMAP全部然后我怀疑操作系统正在策划让客户不要接替作为门廊狗的领导者。

如果有的话,我会说客户端有自尊问题,并且害怕成为mailto协议处理程序。大多数客户无法抗拒询问是否应该是主要的,如果你说是,他们会将这个词传递给其他应用程序和注册表。他们确保每个人都知道他们是家里的新邮箱之王。

那么,我首先尝试(基本故障排除):安装另一个邮件客户端,看看它是否有同样的问题。如果是这样,你的操作系统就是一个恶霸,你会想要探索这样的路线。

但是如果这个其他客户端可以进入默认程序俱乐部并成为mailto处理程序,则问题在于您的应用程序。这是一个很大的懦夫,不知道如何正确地宣称自己。

但是,就像许多弱者等待一个很酷的孩子把他们带到他们的翅膀下(并且通过翼,我的意思是Thunderbird。不要打扰任何其他客户),你的应用程序可以站在第三工作的肩膀上 - 派对客户。

我们必须假设Thunderbird做了至少一个,可能还有两个你的应用没做的事情。第一个是将它的名称与注册表中的协议绑定。去看看你是否能找到他的名字以及它与mailto协议的关联方式。很有可能你可以换掉你的名字,或者至少试着把协议钉在你身上。

T-Bird可能做的第二件事是让自己进入“默认程序”列表(我不喜欢7的一个特征,因为它背后有一个很酷的概念 - 即,让我们小组如果其中一个人可以做类似的工作,那么应用程序可以在前面而不是等待和看到。但是Windows通过表现得像过度保护的父母一样,并且出现在孩子们的派对上,从而搞砸了那个好时光(大惊喜)。说“我认为这两个应该属于这一组,不是吗?”

嗯,我的希望是通过从Thunderbird借用来访问mailto,你会被欢迎进入默认的程序俱乐部,但如果你不是,你仍然是mailto处理程序,我会在尝试解决这个问题之前,把它写下来,至少对它持一两周的幸灾乐祸。

现在,如果Thunderbird无法控制邮件,我非常倾向于认为Windows 7实际上放置了某种奇怪的种姓系统,其中应用程序和它的安装程序(例如用户)必须如何通过弄清楚这个大秘密是什么来证明他们在团队中的价值。

哦,如果所有其他方法都失败了,请尝试在安全模式下重新启动,无需联网,在该环境中安装客户端,然后启动它。在其他人处于假死状态时,查看您是否无法将其设为默认值。通过编写带有mailto的基本HTML页面进行测试运行(显然没有网络),看看点击它是否打开了客户端。

当你以正常模式重新开始时,你的手指会交叉。

如果上述任何一点被证明有帮助,请告诉我。