4

好的,这可能是我的系统的问题,但我很难让 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

4 回答 4

2

您在问题中引用的答案中描述的方式对于 Windows 7 和其他操作系统似乎是正确的方式。

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

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

于 2011-08-18T11:16:44.400 回答
1

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

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

看看这个页面: Default Mailto Registry

于 2015-05-06T08:06:51.370 回答
0

如何在 Windows 上添加自定义 url 处理程序。像 iTunes itms://相关但不相关。

于 2011-08-18T09:42:18.943 回答
-1

对于一个相当普遍的问题,这似乎是一个非常高级的书呆子级别的上下文。作为一个书呆子,我被关于 64 与 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 页面来进行测试运行(显然没有网络),然后查看单击它是否会打开您的客户端。

然后在正常模式下重新启动时交叉手指。

让我知道以上任何一项是否有帮助。

于 2011-09-28T09:33:09.230 回答