【茶包射手筆記】Word無法在Windows Service中執行
3 |
嘗試將先前提過的Word套表服務寫成Windows Service,原本使用Console Application + Self-Hosting ASP.NET Web API測試無誤,移進Windows Service卻壞了。試過將服務執行身分調為本機系統(LocalSystem)或AD網域帳號,錯誤依舊。使用Visual Studio追蹤進程式找到錯誤源頭:
doc = wordApp.Documents.Open(FileName: ref filePath, ReadOnly: ref readOnly);
doc.Activate();
filePath指向的範本docx確定存在,Documents.Open()也未出錯,但執行完doc == null,導致下一列要執行doc.Activate()時爆出NullReferenceException。
同一服務裝在Windows 2003運作順利,在我自己的Windows 2008 R2上也沒問題,問題只發生在另一台Windows 7 32bit開發機器上,一時鬼打牆,瞎抓好一陣子才想到是老問題: c:\windows\syswow64\config\systemprofile\desktop (開始曾一度懷疑,但不知怎麼錯記成它只發生在64bit,連口供都沒問就把人放走... orz)
在32位元Windows 7上開個C:\Windows\System32\config\systemprofile\Desktop資料夾,搞定收工。
補記一點: 掛成Windows Service的程式還能逐行偵錯嗎? Yes, You Can!
執行Windows Service後,用DEBUG/Attach to Process找到該程序掛上去,接下來設中斷點、逐步偵錯的做法就跟直接由VS啟動沒有兩樣囉~ 向地表上最強大的IDE – Visual Studio敬禮!!
Comments
# by JerryH
Windows server 2008 64 bits office 2007 加了desktop 解了null reference 但會遇到這個error System.Runtime.InteropServices.COMException (0x80040155): 介面未登錄 (發生例外狀況於 HRESULT: 0x80040155)
# by Jeffrey
to JerryH, 試試註冊OLB能否解決。(參考:http://blog.darkthread.net/post-2013-11-01-word-vsto-issues.aspx )如果成功,麻煩回報,我再補充於文章。
# by JerryH
找到問題了 我是office 2007更新到SP3問題就解了 謝謝!!