2011-08-18 106 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

相關問題