2008年10月1日

Sandcastle Help File Builder 工具 (SHFB)無法接受含有 .help, .hlp, 或 .h 的 Path (造成 HTML Help Compiler Crash)

最近同事在準備公司講座的資料,要講Sandcaste這個產生CHM說明文件的Tool
(See CodePlex),但是離奇的是, 從上週末他裝好 Sandcastle就發現每次 Build 文件都會失敗, 每次都跳出以下的錯誤畫面,一直到今天下午都沒解:
 
HTML Help Compiler Crash

一開始很自然的把原因歸咎於 Vista 軟體相容性的問題,
但是印象中以前我用都很正常,為了捍衛 Vista 的清白 (幹嘛這麼累,又沒拿錢=.=)
我也在小黑上灌了Sandcastle(Engine) + HelpFile Builder(SHFB, See CodePlex),
最後灌了 SHFB 推薦的 Microsoft HTML Help Compiler v1.4,然後拿他的檔案來 Build,
薑薑薑薑~~果然很忠實的掛點了!! (錯誤畫面跟上圖一樣)

接下來我們花了快半小時東找西找,看哪裡有問題,
還拿了另一台機器來試,發現那台機器怎麼 Build 都成功,這下真的冏了,
周末就要上台 present 了,莫非就要從此黑掉? (雖然說也不是我黑 XD)
而我們在安裝 Microsoft HTML Help Compiler 的時候發現一個奇怪的現象,
讓我們認為是因為用舊的版本來覆蓋 Vista 內建的新版 Compiler,而造成的錯誤,
官方下載頁面說這個 Compiler 是 V1.4:
MS_HTML_Help_V1.4

但是安裝畫面上寫版本是 1.3:

MS_HTML_Help_V1.4_SetupPage_V1.3

安裝過程中的確認畫面也告訴我這是 V1.3:
MS_HTML_Help_V1.4_SetupPage_V1.3_Check

安裝完畢後,很離奇的看到 V1.31 跟我講我的電腦中還有更新的版本
MS_HTML_Help_V1.4_SetupPage_V1.3_Done_V1.31

這時候除了按下確定,我也不能怎樣了。接下來又換V1.3 很開心的跟我說裝好了:
MS_HTML_Help_V1.4_SetupPage_V1.3_ReallyComplete

OK, 既然裝好了,那麼去 File System 看一下最主要的「hhc.exe」到底是甚麼版本吧:
 MS_HTML_Help_V1.4_HHC_Version4.74.8702.0

PERFECT!!!! 原來其實是4.74.8702.0版呀!!!!!
不知道有多少人按順序看完以上畫面還沒有神經錯亂的 (嗯,高手),Anyway,
後來我 Google 到一篇「Version of HTMLHelp」,終於搞清楚到底是怎麼回事了,
總之官方下載頁面的版本是最新的沒錯,而且 XP/Vista 都通用,直接拿來安裝,
然後眼睛閉著一路確定下去就 OK 了。(有興趣的話可以詳細看上面那篇說明)

在排除了 HTML Help Compiler 的版本問題之後,還是不懂為何無法成功Build說明文件,
最後我同事Google到Sandcastle官網上的討論;「HHC.exe Unexpectedly crashes」,
(Google 果然是 RD 吃飯的工具 XD) 在最下面的一篇回覆裡面終於發現問題所在,
原來是SHFB的Project File(.shfb) 所在的檔案路徑中不能含有 .help / .hlp / .h
否則 HTML Help Compiler 就會直接死給你看,沒有任何錯誤訊息,
用 VS2005 來偵錯也只看的到「存取違規」之類的深奧錯誤訊息,根本搞不懂怎麼回事。

剛剛我又作了一些實驗,發現的確是跟 .shfb 檔案本身所在的路徑有關,
包含 .shfb 要吃的 .dll & .xml 檔案的資料夾,名稱亂取都沒問題,例如以下這樣:
Sandcastle_(Bin)FolderPathTest_OK

照樣可以輕鬆 Build 出 CHM 的說明文件。

最後心得;
  1. 微軟你的版本號可以搞得再誇張一點沒關係。
  2. 這個 HTML Help Compiler 的年代是 1999 年,
    會有這種詭異的限制也不是不能理解。
  3. 下次要更謹慎思考(環境上)所有產生變化的地方
    其實那台怎麼 Build 都成功的機器,
    .shfb 檔的檔案路徑裡面的確是沒有 .help / .hlp / .h。
  4. Google 好威呀,最後那篇關鍵討論 CodePlex 內建的 search Wiki 功能 還找不到哩 ~ (關鍵字:html help compiler crash)

沒有留言:

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D