好吧,这可能是我的系统有问题,但是我很难让Windows 7识别我的自定义exe作为mailto协议的默认处理程序。
首先,我看到了这个:以编程方式用mailto协议注册Windows程序
接下来,我看到了这些:
- 如何使用Windows开始菜单注册Internet浏览器或电子邮件客户端
- 注册应用程序到URL协议
我已经添加了看起来合适的注册表项,但每次我点击mailto链接时(无论是在浏览器中还是通过运行窗口),我仍然会收到Windows Live Mail。我已经为所有用户和当前用户设置了注册表项,但仍然不起作用。
当我进入"默认程序"应用程序并向下滚动到mailto协议时,我只看到Outlook和Windows Live Mail列出。我的自定义应用甚至没有出现
我想这要么是Windows 7的特殊问题,要么是我的电脑的问题。
我的自定义应用程序是一个WinForms . net应用程序,但我不认为这很重要。
任何想法都非常欢迎。
您在问题中提到的答案中描述的方法似乎适用于Windows 7和其他操作系统。
我想你用的是64位版本的Windows 7,而你的程序是32位应用程序。因此,如果应用程序写入HKEY_LOCAL_MACHINESOFTWAREClassesmailtoshellopencommand
键,它只修改用于32位应用程序的HKEY_LOCAL_MACHINESOFTWAREWow6432NodeClassesmailtoshellopencommand
键。你可以在这里和这里阅读更多关于注册表虚拟化的信息。
如果是你的情况,你可以直接调用本地Win32 API RegOpenKeyEx与KEY_WOW64_64KEY标志,这将在32位操作系统上被忽略。
虽然是一个很晚的答案,但对我来说是这样的:在regedit上,这取代了其他答案中提到的注册表项:
HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellAssociationsURLAssociationsMAILTOUserchoice
请看这一页:默认邮件注册
如何在Windows上添加自定义url处理程序。像iTunes项目://相关但不相关
对于一个相当常见的问题,这似乎是一个非常低级的上下文。作为一个书呆子,我被关于64 vs x86和。net伪通用二进制方面的论述所吸引。但是作为技术支持解决问题的人,我不禁认为,核心问题需要弄清楚,并系统地解决……
所以,不管邮件客户端是什么(就像你自己说的),不管你的CPU是什么,真正的问题是你不能让邮件客户端成为mailto的默认协议处理程序。或者简单地说,你不能让你喜欢的程序成为默认程序。
我倾向于认为问题的64/86方面是不相关的。它们很有趣,可能有一些效果,但是如果程序运行得很好(架构中的代码没有问题,等等),如果它发送电子邮件也很好(电子邮件可以发送和接收,所有的SMTP和IMAP都是如此),那么我怀疑操作系统正在密谋阻止客户端接管作为前台狗的领导者。
如果有的话,我会说客户有自尊问题,害怕成为mailto协议处理程序。大多数客户都忍不住问是否应该是主要的,如果你说是,他们会把这个词传递给其他应用程序和注册表。他们确保每个人都知道他们是家里的新邮箱王。
所以,我首先尝试的是(基本的故障排除):安装另一个邮件客户端,看看它是否有同样的问题。如果是这样,说明你的操作系统是个恶霸,你会想要探索这样的路径。但是如果另一个客户端可以进入默认的程序俱乐部并成为mailto处理程序,那么问题就出在你的应用程序上。这是一个不知道如何正确断言自己的大懦夫。
但是就像许多弱者等待一个酷的孩子把他们带到他们的翅膀下(我说的翅膀是指雷鸟)。不要为其他客户端而烦恼,你的应用可以站在第三方客户端的肩膀上。
我们必须假设雷鸟至少做了一件或两件你的应用程序没有做的事情。第一个是在注册表中将它的名称与协议绑定。去看看你能不能找到他的名字以及它和邮件协议的关系。很有可能你可以把他的名字换成你的,或者至少试着把协议也钉在你身上。
T-Bird可能做的第二件事是把自己放在"默认程序"列表中(这是7的一个功能,我不太喜欢,因为它背后有一个很酷的概念——也就是说,让我们把应用程序放在一起,而不是每次都等着看其中一个是否能做类似的工作。)但Windows搞砸了这段美好的时光(大惊喜),他总是表现得像个过度保护孩子的家长,出现在孩子们的聚会上,说:"我认为这两个应该在这个组里,你呢?"
嗯,我希望通过从雷鸟借用mailto来访问它,你会被欢迎进入默认程序俱乐部,但如果你不是,你仍然是mailto处理程序,我会把它写下来,至少幸灾乐祸一两个星期,然后再试图解决这个问题。
现在,如果雷鸟不能得到mailto控制,我很倾向于认为Windows 7实际上是放置了某种奇怪的种姓制度,其中应用程序和它的安装程序(例如用户)必须通过弄清楚什么是大秘密来证明他们在组中的价值。
哦,如果所有这些都失败了,尝试在没有网络的安全模式下重新启动,在该环境中安装客户端,然后启动它。看看你能不能在其他人处于假死状态时把它设为默认值。通过编写一个带有mailto的基本HTML页面进行测试运行(显然没有网络),看看点击它是否会打开您的客户端。
然后当你启动到正常模式时交叉手指。