2013-02-12 20 views
16

Ich verwende WiX 3.5. Vor kurzem trat der folgende WiX-Fehler häufig auf dem Erstellungsserver auf:Fehler LGHT0301: Fehler beim Öffnen der Datenbank

light.exe (,): Fehler LGHT0301: Fehler beim Öffnen der Datenbank. Bei der Überprüfung tritt dies am häufigsten auf, wenn versucht wird, eine Datenbank mithilfe einer nicht unterstützten Codepage oder einer Datei zu öffnen, die keine gültige Windows Installer-Datenbank ist. Bitte verwenden Sie eine andere Codepage in Module/@ Codepage, Package/@ SummaryCodepage, Product/@ Codepage oder WixLocalization/@ Codepage; oder stellen Sie sicher, dass Sie den Pfad zu einer gültigen Windows Installer-Datenbank angeben.

Auf welche "Datenbank" bezieht sich der Fehler? (Keiner der WiX Quelldateien in einer langen Zeit geändert, so bezweifle ich, es ist ein Codepage Problem.)

Other people haben berichtet, dass dieser Fehler durch Trend Micro Office Scan verursacht werden kann, die in der Tat auf der Installation Server bauen. Ich habe den Systemadministrator gebeten, die Build-Verzeichnisse vom Scan auszuschließen, aber dieser Fehler tritt immer noch auf. Wie kann ich feststellen, ob der Virenscanner der Schuldige ist? (Der Fehler tritt nicht immer auf. Wenn ich den Virenscanner deaktiviere und der nächste Build erfolgreich ist, weiß ich immer noch nicht, ob der Fehler dauerhaft behoben wurde.)

+0

Siehe auch: http://StackOverflow.com/q/1064580/130352 –

Antwort

13

Nach dem Studium der WiX-Quellcode und Ausführen von Process Monitor, fand ich, dass das Ausschließen der Build-Verzeichnisse von der Virensuche nicht ausreicht.

Erläuterung: Wenn light.exe ausgeführt wird, wird die Ziel-MSI-Datei in einem temporären Verzeichnis erstellt. (Diese Datei ist die Datenbank, auf die sich die LGHT0301-Fehlermeldung bezieht.) Nachdem light.exe die MSI-Datei schließt, öffnet ntrtscan.exe die MSI-Datei für Lesezugriff und schreibgeschützte Freigabe. Später versucht light.exe in dem Datenbanküberprüfungsschritt die MSI-Datei für Lese-/Schreibzugriff erneut zu öffnen, und eine Freigabeverletzung tritt auf.

Lösung: Das temporäre Verzeichnis von der Echtzeit-Virensuche ausschließen. Unter Windows Server 2008 lautet dieses Verzeichnis beispielsweise C:\Users\«username»\AppData\Local\Temp.

+4

Das Ausschließen des temporären Verzeichnisses von der Virensuche ist sehr kontraproduktiv und aus sicherheitstechnischer Sicht ein Albtraum. Immerhin ist das temporäre Verzeichnis normalerweise von jedem Prozess beschreibbar. Darüber hinaus ist es möglicherweise nicht einfach, den Virenscanner zu deaktivieren oder seine Einstellungen zu bearbeiten (z. B. in einer Unternehmensumgebung). – knittl

+1

Sie können die Umgebungsvariable WIX_TEMP verwenden, um ein benutzerdefiniertes temporäres Verzeichnis anzugeben, das Sie möglicherweise aus dem Echtzeitvirus ausschließen möchten Scannen. –

3

Dies ist ein häufiges Problem bei Build-Prozessen und Antivirus. Der Scanner erkennt das neue MSI-Paket und versucht es zu scannen. Währenddessen versucht der Build-Prozess, ihn zu validieren, indem er die Internal Consistency Evaluators (ICE) -Suite ausführt, und Sie erhalten einen Fehler, da die Datenbank über einen Mutex verfügt.

Sie sollten nur die Virenprüfung aus Ihren Build-Ausgabeordnern entfernen. Alternativ können Sie die Validierung vom Befehl Light entkoppeln, sodass der Antivirus-Scan das MSI-Handle zurückgibt, bevor Sie die ICE-Validierung ausführen.

+1

Die Erstellungsordner werden (vermutlich) bereits vom Scan ausgeschlossen. –

+1

Guter Punkt - AV scannt auch oft den temporären Ordner. Es könnte sich lohnen, die Parameter zu überprüfen, die Sie an den Lichtbefehl übergeben. IIRC ist es möglich, den Ordner anzugeben, der für temporäre Artefakte verwendet wird. Ich würde nicht empfehlen, AV auf Ihrem temporären Ordner zu deaktivieren, da dies ein Sicherheitsrisiko darstellen könnte. Es könnte sich auch lohnen, dem Wix-Team vorzuschlagen, dass sie eine Wiederholungsschleife in den Validierungsschritt einfügen, um Situationen zu behandeln, in denen AV die Datei für kurze Zeit festhält, was überhaupt nicht ungewöhnlich ist. –

3

Ich hatte das gleiche Problem, das tatsächlich wirklich mit Codepages und Spracheinstellungen meines Systems zusammenhing.

Durch das Hinzufügen der englischen Eingabesprache in den regionalen Windows-Einstellungen wurde das Problem bei meiner deutschen Windows-Installation behoben.

2

Die wahre Ursache war Trend Micro real time scanning!

(Das folgende ist nur als historische Referenz)

Ich folgte @ Michael Liu Antwort und löste das Problem


ich hatte das gleiche Problem.

Ich beziehe mich nicht auf Codepage (oder SummaryCodepage) in einem dieser Tags oder tatsächlich irgendwo in der WXS. Putting Codepage = "1252" hat nichts geändert.

Schließlich habe ich versucht,

encoding="utf-8" 

zu dem XML-Tag hinzugefügt, die bisher nur eine Version hatte = '1.0' Attribut. Dies behebt das Problem, wie in "Failed to open the database" error. - SOLVED

1

beschrieben. Es war auch das Antivirus-Programm für mich.

Eine einfache Möglichkeit zu überprüfen, ob das Problem mit dem Antiviren-Programm zusammenhängt, ist das Deaktivieren der ICE-Validierung in der WiX-Projekteinstellung (mit Version 3.7). Dies hat für mich funktioniert und ist jetzt eine dauerhafte Einstellung, da Sie in unserer Firma die Einstellung der Antivirus-Software nicht ändern können.

17

Die "Disable the ICE Validierung" funktionierte für mich - nur eine Einstellung durch Visual Studio 2012 in der .Setup.

+3

Das löste das gleiche Problem für mich. Gehe zu den wix Projekteigenschaften, Werkzeugeinstellungen und dann auf "ICE-Validierung unterdrücken" – Contisma

+0

Ich habe dieses Problem auch bei der Arbeit mit Version 3.8 festgestellt. Die obigen Schritte haben das Problem gelöst. – estebro

+0

für mich war es nicht genug, ICE-Validierung für nur aktive (debuggen) Konfiguration zu unterdrücken, ich musste ICE Validierung für alle Konfigurationen unterdrücken und das hat den Trick. – nlv

-1

Dies ist der häufigste Fehler, den ich bei der Verwendung von WiX gefunden habe. Die einfachste Lösung hierfür finden Sie unter Eigenschaften Ihres Projekts → Werkzeugeinstellungen → (Prüfen) ICE-Validierung unterdrücken.

Verwandte Themen