這兩天在擺弄剛剛到手的夏新E850,哈哈,總算有機會體驗一下Windows Mobile編程了,當然一開始總是從最基礎的開始——學習如何使用ActiveSync。廠商提供的版本是4.1的,似乎有點早,但一開始也沒有注意,就安裝在機器上了,嘗試同步通訊錄,可是每次總是不成功,而且報的錯誤比較怪,見下:
中文版
ActiveSync在台式機上遇到問題,支援代碼:85010014
英文版
ActiveSync encountered a problem on the desktop. Support Code: 85010014
平時其他客戶的機器上出問題我倒不是很在乎,如今自己機器遇到這種問題,這個case不做也不行了,唉,只能硬著頭皮上阿。
先請教了一位同事,同事說可能需要重建parnership,就是說把Desktop和Mobile上原來建的Profile都刪掉,然後重新跟著嚮導再建一遍Profile,但試了好幾次都不行,同事也沒啥辦法了,於是開始在網上尋找資訊。
很幸運,找到了一篇Troubleshooting的文章:http://kb.palm.com/SRVS/CGI-BIN/WEBCGI.EXE?New,Kb=PalmSupportKB,ts=Palm_External2001,Case=obj(41810)
在這篇文章中,有好幾種workaround,於是我只能一個一個試。
首先,我注意到了一個叫做wceslog.log的檔案,位於%temp%目錄下,開啟這個檔案一看,發現了如下資訊:04/12/2007 08:02:38.015 p(4932) t(2280) DbApi -> CDb::_Open - hr = 0x80004005 - db.cpp(439)
04/12/2007 08:02:38.015 p(4932) t(2280) DbApi -> CDb::_Open(0x46d614, &C:\Documents and Settings\Tony Qu\Application Data\Microsoft\ActiveSync\Profiles\WM_Tony_Qu\user.sdf, 0) - returning 0x80004005 - db.cpp(469)
04/12/2007 08:02:38.015 p(4932) t(2280) DbApi -> CDb::OpenDatabase - hr = 0x80004005 - db.cpp(678)
04/12/2007 08:02:38.015 p(4932) t(2280) DbApi -> CDb::OpenDatabase(&C:\Documents and Settings\Tony Qu\Application Data\Microsoft\ActiveSync\Profiles\WM_Tony_Qu\user.sdf, 0, 0x461f76c) - returning 0x80004005, *ppDb == 0x0 - db.cpp(717)
04/12/2007 08:02:48.281 p(4932) t(2124) TraceToFile -> ERROR in COomSession::DoInitOOMSession : hr = 0x80004005 - OomSession.cpp(175)
04/12/2007 08:02:48.281 p(4932) t(2280) TraceToFile -> ERROR in CProfileSession::_CreateNewProfile : hr = 0x80004005 - ProfileSession.cpp(778)
04/12/2007 08:02:51.359 p(4932) t(2280) TraceToFile -> ERROR in CProfileSession::GetChangeTrackingVariables : hr = 0x80004005 - ProfileSession.cpp(933)
04/12/2007 08:02:51.359 p(4932) t(2280) TraceToFile -> ERROR in CMsgProcessor::ProcessMessage : hr = 0x80004005 - MsgProcessor.cpp(577)
04/12/2007 08:02:51.359 p(4932) t(2280) TraceToFile -> ERROR in CService::_HttpPostMethod : hr = 0x80004005 - Service.cpp(1259)
04/12/2007 08:02:51.359 p(4932) t(2280) SyncEngPerf -> Sync Statistics: Finished processing request - Service.cpp(1176)
可以看到有多個函數報0x80004005錯誤,即Access Denied(拒絕訪問),看來許可權方面有問題,根據這一資訊,找到了那篇文章中的一個相關方法:(以下是翻譯,有部分修改)
1. 斷開Windows Mobile裝置
2. 在案頭PC上:點擊 開始菜單 > 所有程式(或程式) > 附件 > 寫字板
3. 在寫字板的檔案菜單中,選擇“開啟”
4. 在Open視窗的底部,將檔案類型設定為"所有檔案"
5. 在檔案名稱文字框中,輸入%temp%. 這將會顯示你的系統臨時目錄
6. 定位並開啟WCESLog.log
7. 從編輯菜單中選擇“尋找”
8. 輸入DoInitOOMSession,按尋找
9. 你是否發現以下資訊?
* 沒有: 繼續搜尋
* 是: 如果找到,你會看到如下資訊
02/28/2006 19:29:29.755 p(432) t(3320) TraceToFile -> ERROR in COomSession::DoInitOOMSession : hr = 0x80004005 - OomSession.cpp(175)
10. 退出寫字板,但請不要儲存檔案。
11. WCESLOG檔案中的"DoInitOOMSession"表示你的防毒軟體阻止了ActiveSync進行同步。請確認你的反病毒軟體是否允許你禁用script blocking
12. 你是否可以禁用反病毒軟體中的script blocking?
* 是: 禁用指令碼阻止。嘗試同步smartphone.
* 否: 如果你的防毒軟體不允許你禁用script blocking, 你可以卸載一個DLL來禁用該功能。
13. 現在我們打算刪除可能阻止同步的那個DLL,但僅在你無法禁用script blocking的情況下使用接下來的步驟
14. 在開始菜單中, 選擇運行
15. 輸入regedit點擊確定
16. 在登錄編輯程式中,開啟HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0006F03A-0000-0000-C000-000000000046}\InprocServer32.
17. 當你點擊InprocServer32, 右面的欄中將會顯示一個列表. 第一條就是(Default).
18. 右擊(Default)項,選擇刪除
19. 嘗試同步你的smartphone.
但用了以上方法之後還是不行。。。
之後發現原來可以通過修複Outlook安裝來解決這個問題,於是就抱著試試看的心理試了一把。。。奇蹟出現了,安裝程式運行完之後,一切都好了,哈哈。後來回過頭來想想,可能問題出在這裡——我的機器上既安裝了Office 2007又安裝了Office 2003,而且Office 2003是在Office 2007之後安裝的,所以可能覆蓋了一些相關的DLL,所以會導致出現問題。
希望以上經驗對大家有用,當然具體問題具體分析,我個人還是比較推薦大家看http://kb.palm.com/SRVS/CGI-BIN/WEBCGI.EXE?New,Kb=PalmSupportKB,ts=Palm_External2001,Case=obj(41810)