2013-02-12 89 views
16

我正在使用WiX 3.5。最近,構建服務器上經常發生以下WiX錯誤:錯誤LGHT0301:無法打開數據庫

light.exe(,):錯誤LGHT0301:無法打開數據庫。在驗證過程中,當嘗試使用不受支持的代碼頁或不是有效的Windows Installer數據庫的文件打開數據庫時,通常會發生這種情況。請在Module/@ Codepage,Package/@ SummaryCodepage,Product/@ Codepage或WixLocalization/@ Codepage中使用不同的代碼頁;或者確保您提供有效的Windows Installer數據庫的路徑。

哪個「數據庫」錯誤指的是?(在維克斯源文件沒有在很長一段時間發生了變化,所以我懷疑這是一個代碼頁的問題。)

Other people報道,這個錯誤可能是由趨勢科技廳掃描,這是對確實安裝引起的構建服務器。我要求系統管理員從掃描中排除構建目錄,但仍會出現此錯誤。 如何確定病毒掃描程序是否是罪魁禍首?(錯誤並不總是會發生,所以如果我禁用病毒掃描程序並且下一次構建成功,我仍然不知道錯誤是否已永久消失。)

+0

另請參閱:http://stackoverflow.com/q/1064580/130352 – 2013-11-27 08:54:33

回答

13

在研究了WiX源代碼並運行Process Monitor後,我發現從病毒掃描中排除構建目錄是不夠的。

說明:當light.exe運行時,它會在臨時目錄中創建目標MSI文件。 (此文件是LGHT0301錯誤消息引用的數據庫。)light.exe關閉MSI文件後,ntrtscan.exe將打開MSI文件以進行讀取訪問和只讀共享。之後,在數據庫驗證步驟中,light.exe會嘗試重新打開MSI文件以進行讀取/寫入訪問,併發生共享衝突。

解決方案:從實時病毒掃描中排除臨時目錄。例如,在Windows Server 2008上,該目錄是C:\Users\«username»\AppData\Local\Temp

+4

從病毒掃描中排除臨時目錄非常反作用,從安全角度來看是一場噩夢。畢竟,臨時目錄通常可由任何進程寫入。此外,禁用病毒掃描程序或編輯其設置可能不太容易(例如在公司環境中) – knittl 2014-03-26 12:28:46

+1

請注意,您可以使用WIX_TEMP環境變量來指定一個自定義臨時目錄,您可能更樂意從實時病毒中排除掃描。 – 2015-05-01 09:16:08

3

這是構建過程的常見問題和防病毒。掃描儀將檢測到新的MSI軟件包並嘗試掃描它。同時,構建過程還會嘗試通過運行Internal Consistency Evaluators(ICE)套件來驗證它,並且由於數據庫有一個互斥體而出現故障。

您應該從構建輸出文件夾中刪除病毒掃描。或者,將驗證從Light命令中分離出來,以便在運行ICE驗證之前,防病毒掃描放棄MSI句柄。

+1

構建文件夾已被排除在掃描(推測)之外。 – 2013-02-12 20:56:24

+1

好點 - AV通常也會掃描臨時文件夾。檢查傳遞給燈光命令的參數可能是值得的。 IIRC可以指定它用於臨時構件的文件夾。我不會推薦在你的臨時文件夾中禁用AV,因爲它可能存在安全風險。值得向Wix團隊建議他們在驗證步驟中加入一個重試循環,以適應AV抓取文件很短時間的情況,這種情況並不罕見。 – 2013-02-13 10:34:14

3

我遇到了與我的系統的代碼頁和語言設置實際上真正相關的相同問題。

在Windows的區域設置中添加英文輸入語言解決了我的德語Windows安裝中的問題。

2

真正的原因是Trend Micro real time scanning

(以下只是作爲歷史參考)

我跟着@邁克爾柳答案,並解決了這個問題


我有同樣的問題。

我不是指任何這些標籤的Codepage(或SummaryCodepage),或者實際上在WXS的任何地方。放置Codepage =「1252」不會改變任何內容。

最後,我嘗試添加

encoding="utf-8" 

到XML標籤,其先前只有一個版本= '1.0' 屬性。這解決了這個問題,如"Failed to open the database" error. - SOLVED

1

中描述的問題這也是我的反病毒程序。

檢查問題是否與防病毒程序相關的簡單方法是在WiX項目設置中禁用ICE驗證(使用版本3.7)。這對我很有用,而且現在是永久性設置,因爲在我們公司中,您無法更改防病毒軟件的設置。

17

「禁用ICE驗證」爲我工作 - 只是通過.Setup中的Visual Studio 2012設置。

+3

這爲我解決了同樣的問題。 轉到wix項目屬性,工具設置,然後選中「抑制ICE驗證」 – Contisma 2014-04-02 03:05:02

+0

我也遇到過使用3.8版本的這個問題。上述步驟解決了這個問題。 – estebro 2014-06-24 12:42:39

+0

對我來說,僅僅是爲Active(調試)配置取消ICE驗證是不夠的,我不得不對所有配置進行ICE驗證,並且做了這個訣竅。 – nlv 2014-08-18 14:50:07

-1

這是我在使用WiX時發現的最常見的錯誤。最簡單的解決方案是轉到項目的屬性→工具設置→(檢查)抑制ICE驗證

相關問題