2011-08-18 87 views
4

好的,这可能是我的系统有问题,但我很难让Windows 7识别我的自定义exe作为mailto协议的默认处理程序。如何注册自定义程序来处理在Windows 7上的mailto协议

首先,我已经看到了这一点: Register Windows program with the mailto protocol programmatically

接下来,我已经看到了这些:

我已经添加了什么似乎是适当的注册表项,但我仍然会在每次单击mailto链接时看到Windows Live Mail(无论是在眉毛上呃或通过运行窗口)。我已经为所有用户和当前用户设置了注册表项,但它仍然无效。

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

我觉得这是Windows 7的特殊之处,或者它与我的电脑有关。

我的自定义应用程序是一个WinForms .Net应用程序,但我不认为这很重要。

任何想法都非常受欢迎。

回答

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的更多信息。

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

+0

是的,它似乎*是正确的...但是,它实际上并不适用于我的系统与我的应用程序。它是一个.net应用程序,所以它在64位操作系统上是64位,在32位操作系统上是32位。就我而言,我正在运行Win7 x64。 – John

+0

@John:.NET应用程序并不像您描述的那样容易。 .NET代码将作为资源放置在.EXE或.DLL文件中,但EXE或DLL可以是** 64位或32位**而不是两者。您可以运行'dumpbin.exe/headers Your.exe'并验证'FILE HEADER VALUES'中是否有'machine(x64)'或'machine(x86)'。只是尝试比较'dumpbin.exe /头文件C:\ Windows \ system32 \ notepad.exe'的输出与'dumpbin.exe /头文件C:\ Windows \ SysWOW64 \ notepad.exe'的输出 – Oleg

+0

我很安静如果你愿意的话,你可以意识到.Net的“苦涩”。我知道检查IntPtr.Size将作为32位应用程序运行时返回4,作为64位应用程序运行时返回8。这部分不是我脑海中的问题。 – John

0

这似乎是一个非常高的书呆子级别的情况下一个相当普遍的问题。作为一个书呆子,我被64和x86以及.net的伪通用二元方面的话语所吸引。但技术支持疑难解答在我不禁认为,核心问题需要明确,并系统地解决...

所以你真正的问题,无论邮件客户端(如你所说)和不管你的CPU如何,你不能让你的邮件客户端成为mailto的默认协议处理程序。或者为了使它非常简单,你不能让你喜欢的程序成为默认程序。

我倾向于认为问题的64/86方面不相关。它们很有趣,可能会产生一些效果,但是如果程序运行良好(在该体系结构中的代码没有问题,等等),并且它确实发送了电子邮件(电子邮件发送和接收,所有SMTP和IMAP全部那么我就怀疑操作系统是否正在密谋让客户端继续成为门廊狗的领导者。

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

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

但是,如果这个其他客户端可以进入默认的程序俱乐部,并成为mailto处理程序,那么问题是与您的应用程序。这是一个很大的懦弱,不知道如何正确地坚持自己。但是像很多弱者在等待一个很酷的孩子把他们带到他们的翅膀下(和翅膀,我的意思是雷鸟,不要打扰任何其他客户),你的应用可以站在工作的第三方的肩膀上第二方客户。

我们必须假定雷鸟至少做了一件事情,也许有两件事情是你的应用没有做的。首先是将它的名字与注册表中的协议绑定。去探索一下,看看你能否找到他的名字,以及它如何与mailto协议相关联。有机会很好,你可以换掉他的名字,或者至少试着把协议固定在你身上。 T-Bird可能做的第二件事是让自己进入“默认程序”列表(这是我不太喜欢的7个功能,因为它背后有一个很酷的概念 - 也就是说,让我们将应用程序组合在一起,而不是每次都等着看,如果其中一个人可以做类似的工作,但Windows通过表现得像过度保护的父母那样行事,并在孩子们的聚会上露面并说“我认为这两个应该在这个组中,不是吗?”

那么,我希望通过从Thunderbird借用它来访问mailto,你会被默认为默认节目俱乐部,但如果你不是,你仍然是邮件处理程序,我会写它,至少在一两个星期内感到满意,b在尝试解决这个问题之前。

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

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

当您在正常模式下开始备份时,横过你的手指。

让我知道如果上述任何证明是最没有帮助的。

1

虽然相当晚的答案,什么工作了,我是这样的:在注册表编辑器,这取代了其他的答案中提到的注册表项:

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

看一看这个页面: Default Mailto Registry

相关问题