嘗試將先前提過的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問題就解了 謝謝!!

Post a comment