2013-02-12 22 views
16

Tôi đang sử dụng WiX 3.5. Gần đây, lỗi WiX sau bắt đầu xảy ra thường xuyên trên máy chủ tạo:Lỗi LGHT0301: Không thể mở cơ sở dữ liệu

light.exe (,): lỗi LGHT0301: Không mở được cơ sở dữ liệu. Trong quá trình xác nhận, điều này thường xảy ra nhất khi cố gắng mở cơ sở dữ liệu bằng cách sử dụng trang mã không được hỗ trợ hoặc tệp không phải là cơ sở dữ liệu Windows Installer hợp lệ. Vui lòng sử dụng trang mã khác trong Module/@ Codepage, Package/@ SummaryCodepage, Product/@ Codepage hoặc WixLocalization/@ Codepage; hoặc đảm bảo rằng bạn cung cấp đường dẫn đến cơ sở dữ liệu Windows Installer hợp lệ.

Lỗi "cơ sở dữ liệu" nào tham chiếu đến? (Không có tệp nguồn WiX nào đã thay đổi trong một thời gian dài, vì vậy tôi nghi ngờ đó là vấn đề về trang mã.)

Other people đã báo cáo lỗi này có thể do Trend Micro Office Scan gây ra. xây dựng máy chủ. Tôi đã yêu cầu quản trị viên hệ thống loại trừ các thư mục xây dựng khỏi quá trình quét nhưng lỗi này vẫn xảy ra. Làm cách nào để xác định xem máy quét vi rút có phải là thủ phạm không? (Lỗi này không phải lúc nào cũng xảy ra, vì vậy nếu tôi vô hiệu hóa trình quét vi-rút và bản xây dựng kế tiếp thành công, tôi vẫn không biết liệu lỗi đó có biến mất vĩnh viễn hay không.)

+0

Xem thêm: http://stackoverflow.com/q/1064580/130352 –

Trả lời

13

Sau khi nghiên cứu mã nguồn WiX và chạy Process Monitor, tôi thấy rằng việc loại trừ thư mục xây dựng khỏi quá trình quét vi-rút là không đủ.

Giải thích: Khi light.exe chạy, nó tạo tệp MSI mục tiêu trong một thư mục tạm thời. (Tệp này là cơ sở dữ liệu mà thông báo lỗi LGHT0301 đề cập đến.) Sau khi light.exe đóng tệp MSI, ntrtscan.exe sẽ mở tệp MSI để truy cập đọc và chia sẻ chỉ đọc. Sau đó, trong bước xác thực cơ sở dữ liệu, light.exe sẽ cố gắng mở lại tệp MSI để truy cập đọc/ghi và vi phạm chia sẻ xảy ra.

Giải pháp: Loại trừ thư mục tạm thời khỏi quá trình quét vi-rút trong thời gian thực. Ví dụ: trên Windows Server 2008, thư mục này là C:\Users\«username»\AppData\Local\Temp.

+4

Việc loại trừ thư mục tạm thời khỏi quá trình quét vi-rút rất hiệu quả và gây ra một cơn ác mộng từ quan điểm bảo mật. Sau khi tất cả, thư mục tạm thời thường được ghi bởi bất kỳ quá trình. Hơn nữa, việc tắt trình quét vi-rút hoặc chỉnh sửa cài đặt của máy có thể không dễ dàng (ví dụ trong môi trường công ty) – knittl

+1

Lưu ý rằng bạn có thể sử dụng biến môi trường WIX_TEMP để chỉ định thư mục tạm thời tùy chỉnh mà bạn có thể vui vẻ loại trừ khỏi vi rút thời gian thực quét. –

3

Đây là vấn đề phổ biến với quá trình xây dựng và chống vi-rút. Máy quét sẽ phát hiện gói MSI mới và thử quét nó. Trong khi đó quá trình xây dựng cũng cố gắng để xác nhận nó bằng cách chạy Internal Consistency Evaluators (ICE) bộ và bạn nhận được một thất bại vì cơ sở dữ liệu có một mutex trên đó.

Bạn chỉ cần xóa quét vi-rút khỏi thư mục đầu ra xây dựng của mình. Ngoài ra, bạn nên hủy xác thực từ lệnh Light để quét chống vi-rút từ bỏ xử lý MSI trước khi bạn chạy xác thực ICE.

+1

Các thư mục xây dựng đã bị loại trừ khỏi quá trình quét (có lẽ). –

+1

Điểm tốt - AV cũng thường quét thư mục tạm thời. Nó có thể là giá trị kiểm tra các thông số bạn vượt qua để lệnh ánh sáng. IIRC có thể chỉ định thư mục mà nó sử dụng cho các tạo phẩm tạm thời. Tôi sẽ không khuyên bạn nên tắt chăn AV trên thư mục tạm thời của bạn vì nó có thể là một nguy cơ bảo mật. Cũng có thể đáng để đề xuất với nhóm Wix rằng họ đặt một vòng lặp thử lại vào bước xác thực để phục vụ cho các tình huống mà AV nắm giữ tệp trong một thời gian ngắn, điều này không có gì bất thường. –

3

Tôi có cùng sự cố thực sự liên quan đến cài đặt mã và ngôn ngữ của hệ thống của tôi.

Thêm ngôn ngữ nhập tiếng Anh trong cài đặt khu vực của Windows đã giải quyết được sự cố trên cài đặt Windows của Đức của tôi.

2

Nguyên nhân thực sự là Trend Micro real time scanning!

(Sau đây là chỉ để tham khảo lịch sử)

Tôi đi theo @ Michael Liu câu trả lời và giải quyết vấn đề


tôi đã cùng một vấn đề.

Tôi không đề cập đến Codepage (hoặc SummaryCodepage) trong bất kỳ thẻ nào trong số đó hoặc trên thực tế ở bất kỳ đâu trong WXS. Đưa Codepage = "1252" không thay đổi gì cả.

Cuối cùng, tôi đã cố gắng thêm

encoding="utf-8" 

cho thẻ XML mà trước đây chỉ có một phiên bản = '1.0' thuộc tính. Điều này đã khắc phục được sự cố, như được mô tả trong "Failed to open the database" error. - SOLVED

1

Đó cũng là chương trình chống vi-rút cho tôi.

Một cách dễ dàng để kiểm tra xem sự cố có liên quan đến chương trình chống vi-rút hay không là vô hiệu xác thực ICE trong cài đặt dự án WiX (sử dụng phiên bản 3.7). Điều này làm việc cho tôi, và là một thiết lập vĩnh viễn, vì trong công ty của chúng tôi bạn không thể thay đổi cài đặt của phần mềm chống vi-rút.

17

"Tắt xác thực ICE" đã hoạt động đối với tôi - chỉ là một cài đặt thông qua Visual Studio 2012 trong .Setup.

+3

Điều này giải quyết được vấn đề tương tự đối với tôi. Goto Thuộc tính dự án của wix, Cài đặt công cụ, sau đó chọn "Loại bỏ xác thực ICE" – Contisma

+0

Tôi cũng gặp sự cố này khi làm việc với phiên bản 3.8. Các bước trên đã giải quyết được vấn đề. – estebro

+0

đối với tôi nó không đủ để ngăn chặn xác nhận ICE cho cấu hình Active (debug), tôi đã phải đàn áp xác thực ICE cho tất cả các cấu hình và đã làm các trick. – nlv

-1

Đây là lỗi phổ biến nhất mà tôi đã tìm thấy khi sử dụng WiX. Giải pháp dễ nhất cho việc này là vào Thuộc tính của dự án của bạn → Cài đặt Công cụ → (Kiểm tra) Ngăn chặn Xác thực ICE.