2009-04-02 36 views
6

Tôi đang sử dụng Windows Installer XML 3.0 (WIX3) để cài đặt một số phần mềm.Nhắc người dùng đóng ứng dụng trong khi gỡ cài đặt (trong WiX)

Tất cả mọi thứ hoạt động tốt, tuy nhiên, tôi đang gặp một thời gian thực sự khó khăn để xử lý các trường hợp sử dụng sau đây: các phần mềm cài đặt là vẫn chạy, khi người dùng cố gắng uninstall nó. Hành vi mặc định dường như xóa tất cả các tệp nhưng cho phép ứng dụng đang chạy (rất khó để xem trong trường hợp của tôi, vì nó nằm trong khay tác vụ).

tôi đã thêm đoạn mã sau vào tập tin installer.wxs tôi:

<InstallExecuteSequence> 
    <Custom Action="WixCloseApplications" Before="RemoveFiles" /> 
</InstallExecuteSequence> 

<util:CloseApplication Id="CloseFoobar" 
         CloseMessage="no" 
         Description="FooBar is still running!" 
         ElevatedCloseMessage="no" 
         RebootPrompt="no" 
         Target="foobar.exe" /> 

Nhưng điều này không làm việc - thậm chí tệ hơn, nó cho thấy một hộp thoại yêu cầu khởi động lại trong cài đặt!

Cách chính xác để làm điều đó là gì?

Trả lời

7

Theo như tôi nhớ nó nên là đủ để thêm tài liệu tham khảo sau đây để UI của bạn:

<DialogRef Id="FilesInUse" /> 
<DialogRef Id="MsiRMFilesInUse" /> 

Những thứ CloseApplication duy nhất là cho các ứng dụng đóng cửa trong khi cài đặt, nhưng nó là buggy (ít nhất là khi tôi đã cố gắng Cách đây vài tháng, có thể nó đã được sửa?)

Thật không may, đây lại là một ví dụ cho tài liệu rất kém về WiX, thậm chí không có kịch bản cài đặt/gỡ cài đặt chuẩn như thế này.

+0

Cảm ơn bạn đã trả lời! Tôi đã thử nó theo cách đó, nhưng nó không hiệu quả với tôi. Theo MSDN cả hai hộp thoại cũng chỉ được hiển thị trong khi cài đặt và không được đánh giá trong quá trình gỡ cài đặt! – beef2k

+0

Vâng, CloseApps có thể cần một chút tăng cường để xử lý tất cả các trường hợp này. Nó không xử lý tất cả các kịch bản, được nêu ra. –

+1

@RobMensching Đóng Đóng ứng dụng tốt hơn ngay bây giờ? – tofutim

1

Có một câu hỏi tương tự được hỏi trên danh sách gửi thư của người dùng wix vài ngày trước. Câu trả lời được đưa ra là:

Đây là cách Windows hoạt động trước Vista và Khởi động lại trình quản lý. Có phải là cửa sổ cấp cao nhất khả dụng. Ứng dụng trong khay không số .

Có một vài chủ đề về chủ đề trong số wix-users archive.

0

Bạn có thể kiểm tra nhật ký gỡ cài đặt (here is how to enable them), theo như tôi nhớ Windows Installer sẽ đặt tệp của bạn ở trạng thái đang chờ xóa và yêu cầu khởi động lại ở cuối.
Ngoài ra, bạn có thể viết một hành động tùy chỉnh đơn giản sẽ giết quá trình của bạn.

0

cho một ví dụ làm thế nào để sử dụng closeapplication, hãy làm theo liên kết này: wix github project, unit tests

Để hiển thị một hộp thoại nhắc nhở bạn có thể sử dụng: <util:CloseApplication Id="CloseIE" Target="iexplore.exe" PromptToContinue="yes" Description="Test" />

0

câu trả lời Shay là đúng. Các phiên bản gần đây của Windows Installer chỉ hoạt động theo cách này. Trình cài đặt Windows gặp nhiều rắc rối để đảm bảo rằng bạn có thể tránh khởi động lại lúc gỡ cài đặt bằng cách ánh xạ lại các tệp Dll được sử dụng vv. Nói chung, một ứng dụng đang chạy có thể tiếp tục chạy sau khi gỡ cài đặt và một số dọn dẹp sẽ xảy ra khi ứng dụng tắt, phần còn lại sau lần khởi động lại tiếp theo. Vấn đề là nếu Windows Installer có thể di chuyển các tệp nhị phân đang sử dụng sang một vị trí khác, hãy giữ cho bất kỳ ứng dụng nào đang chạy và thay thế các ứng dụng đang được sử dụng (nhưng sao lưu bộ nhớ được sao lưu lại) và tất cả những gì cần thiết là xóa một chút rác không cần thiết ở lần khởi động tiếp theo thì tại sao lại khởi động lại?Không cần hiển thị hộp thoại sử dụng tệp để tình huống không phát sinh.

Điều này có thể gây ra sự cố nếu ứng dụng tìm cách truy cập tệp đã được gỡ cài đặt nhưng tôi cho rằng rủi ro được xem là thấp. Nếu ứng dụng cần biết rằng việc gỡ cài đặt đang diễn ra thì việc xen kẽ với Trình quản lý khởi động lại sẽ hoạt động - Windows sẽ thông báo rằng có một quá trình gỡ cài đặt đang diễn ra. Nếu không một lần nữa, Shay là chính xác. Viết hành động tùy chỉnh gỡ cài đặt nếu cần thiết để yêu cầu ứng dụng đóng cửa.

0

Tôi cũng phải đối mặt với vấn đề này. Thay đổi thuộc tính Trước thành "InstallValidate" làm việc cho tôi.

<Custom Before="InstallValidate" Action="WixCloseApplications"/> 
Các vấn đề liên quan