2011-06-29 44 views
7

Tôi đã thấy câu hỏi này được hỏi nhiều lần nhưng không có câu trả lời nào có vẻ phù hợp với tôi. Tôi rõ ràng là thiếu một cái gì đó tiểu học, nhưng tôi dường như không thể tìm ra nó là gì! Tôi đã chỉ sử dụng WiX trong một vài ngày vì vậy tôi vẫn còn rất mới với nó.Tệp Kiểm tra WiX tồn tại trước khi Cài đặt

Về cơ bản, tôi đã tạo một plug-in cho một sản phẩm hiện có và tôi muốn kiểm tra xem sản phẩm đã được cài đặt chưa trước khi cho phép cắm vào của tôi để cài đặt. Tôi nghĩ cách đơn giản nhất là kiểm tra tệp thực thi chính nằm trong thư mục chính xác.

mã có liên quan của tôi cho đến nay:

<Property Id="FILEEXISTS"> 
    <DirectorySearch Id="CheckFileDir" Path="INSTALLDIR" Depth="0"> 
    <FileSearch Id="CheckFile" Name="main.exe" /> 
    </DirectorySearch> 
</Property> 

<Condition Message="File does exist.">NOT FILEEXISTS</Condition> 

đâu INSTALLDIRId của thư mục chứa main.exe nên và được định nghĩa trong Directory thẻ lồng nhau.

Trả lời

5

Tìm kiếm được thực thi trước khi người dùng có thể đặt thư mục cài đặt thông qua hộp thoại MSI. Vì vậy, cách tiếp cận này sẽ không hoạt động theo cách bạn muốn.

Nếu bạn muốn kiểm tra tệp trong thư mục cài đặt, tôi đề xuất một hành động tùy chỉnh giao diện người dùng được thực hiện thông qua sự kiện kiểm soát DoAction. Sự kiện này có thể được kích hoạt bằng nút Tiếp theo trên hộp thoại chọn thư mục của bạn.

Không có hành động tùy chỉnh được xác định trước cho điều này, vì vậy bạn sẽ cần phải viết một hành động tùy chỉnh với mã tùy chỉnh. Nó phải là một DLL hoặc VBScript nhận được xử lý cài đặt. Bạn có thể tìm thấy một hướng dẫn nhỏ tại đây: http://www.codeproject.com/KB/install/msicustomaction.aspx

+1

Điểm tốt, Cosmin! Tôi cho rằng trong trường hợp này, bản thân INSTALLDIR sẽ được tìm kiếm trong registry nơi cài đặt ứng dụng chính đặt nó vào ... –

+0

Có, lấy đường dẫn cài đặt cũ từ registry là một ý tưởng hay. –

+0

Xin chào, cảm ơn vì điều đó. Tôi hiểu tại sao bây giờ. Tôi sẽ thay đổi để tìm kiếm đăng ký để có được đường dẫn cho một giải pháp hoàn chỉnh hơn. Trong thời gian chờ đợi, tôi đã làm cho nó hoạt động bằng cách thay đổi @Path thành "[ProgramFilesFolder] Manufacturer/ProductFolder" và điều kiện thành "FILEEXISTS" thay vì "NOT FILEEXISTS" – Chris

1

Tôi cho rằng bạn bỏ lỡ các dấu ngoặc vuông [] xung quanh INSTALLDIR trong @Path. Ngoài ra, độ sâu @ = 0 trông đáng ngờ, chỉ cần bỏ qua thuộc tính này cho tìm kiếm đơn giản, nó phải mặc định là 1 và đây là những gì bạn thường cần tìm kiếm tệp trong thư mục.

Hy vọng điều đó sẽ giúp, nhưng nghiêm túc, câu hỏi của bạn không chứa câu hỏi thực sự. Rất khó để hiểu liệu bạn có gặp lỗi hay điều kiện không hoạt động ...

+0

Xin lỗi, điều kiện của nó không hoạt động. Cho dù tệp 'main.exe' có hay không, ứng dụng sẽ vẫn cài đặt bất kể. Tôi đã thử @Path có và không có [], và chỉ cố gắng bỏ qua @Depth, nhưng vô ích. Liệu nó có quan trọng cho dù thư mục vẫn còn đó ngay cả khi tập tin không phải là? Chúc mừng – Chris

+0

Tôi không chắc chắn ý bạn là gì, nhưng thuộc tính FILEEXISTS sẽ chỉ được đặt trong trường hợp tệp được tìm thấy trong thư mục bạn đang tìm kiếm. BTW, kiểm tra tệp nhật ký để hiểu xem thuộc tính FILEEXISTS có được đặt hay không giá trị –

Các vấn đề liên quan