2013-06-20 79 views
6

Tôi đang thực hiện nâng cấp và gỡ cài đặt chính sản phẩm hiện có trước khi cài đặt phiên bản mới. Nhưng tôi muốn giữ lại tập tin cấu hình hiện có.Wix CopyFile trước khi gỡ cài đặt và khôi phục sau khi gỡ cài đặt

Vì phiên bản trước đó không có vĩnh viễn = "có", nó sẽ xóa tệp cấu hình khi gỡ cài đặt.

Và làm cách nào tôi có thể làm điều gì đó như thế này tạo một bản sao của 'app.config' thành 'app.config.bak' trước khi gỡ cài đặt. Sau khi gỡ cài đặt, nó sẽ hoàn nguyên trở lại từ 'app.config.bak' thành 'app.config'.

<DirectoryRef Id="INSTALLDIR"> 
    <Component Id="BackupConfigComponent" Guid="87368AF7-4BA2-4302-891A-B163ADDB7E9C"> 
    <CopyFile Id="BackupConfigFile" SourceDirectory="INSTALLFOLDER" SourceName="app.config" DestinationDirectory="INSTALLFOLDER" DestinationName="app.config.bak" /> 
    </Component> 
</DirectoryRef> 

<DirectoryRef Id="INSTALLDIR"> 
    <Component Id="RestoreConfigComponent" Guid="87368AF7-4BA2-4302-891A-B163ADDB7E9C"> 
    <CopyFile Id="RestoreConfigFile" SourceDirectory="INSTALLFOLDER" SourceName="app.config.bak" DestinationDirectory="INSTALLFOLDER" DestinationName="app.config" /> 
    </Component> 
</DirectoryRef> 


<InstallExecuteSequence> 
    <Custom Action="BackupConfigFile" After="InstallInitialize" /> 
    <RemoveExistingProducts After="InstallInitialize" /> 
    <Custom Action="RestoreConfigFile" After="InstallInitialize" /> 
</InstallExecuteSequence> 

Cảm ơn

Trả lời

3

Tất cả bạn phải làm là thay đổi <Custom Action="RestoreConfigFile" After="InstallInitialize" />-<Custom Action="RestoreConfigFile" After="RemoveExistingProducts " />

Nó chỉ đơn giản là một vấn đề thời gian mà bạn đang có. Bạn đang nói cho tất cả ba hành động diễn ra sau khi InstallInitialize vì vậy rất có thể là họ không tuân theo thứ tự mà chúng được viết. . Nó luôn luôn là một ý tưởng tốt hơn để rõ ràng liệt kê thứ tự nào bạn muốn họ A tốt hơn, hoàn chỉnh sửa chữa, sẽ là:

<Custom Action="BackupConfigFile" After="InstallInitialize" /> 
<RemoveExistingProducts After="BackupConfigFile" /> 
<Custom Action="RestoreConfigFile" After="RemoveExistingProducts " /> 

EDIT: (Căn cứ vào ý kiến) Để tạo một hành động tùy chỉnh trong MSI bạn sẽ cần tạo phần tử CustomAction. Mã phía sau để tạo hành động tùy chỉnh cũng là cần thiết. Tuy nhiên, nếu bạn chỉ cố sao chép một tệp, tôi khuyên bạn nên sử dụng phần tử CopyFile. Nó là dễ dàng hơn nhiều và sạch hơn so với đi qua tất cả các bước hành động tùy chỉnh để làm những gì tôi nghĩ rằng bạn đang đi.

+0

Nó nói Lỗi Giá trị của thuộc tính Custom/@ After, 'RemoveExistingProducts', không phải là số nhận dạng hợp pháp. Số nhận dạng có thể chứa các ký tự ASCII A-Z, a-z, chữ số, dấu gạch dưới (_) hoặc dấu chấm (.). Mỗi số nhận dạng phải bắt đầu bằng chữ cái hoặc dấu gạch dưới. –

+0

Ok đó là do không gian, nhưng bây giờ nó nói, tham chiếu chưa được giải quyết để biểu tượng 'CustomAction: BackupConfigFile' trong phần 'Sản phẩm: *'. –

+1

Bạn đã tạo một Hành động Tùy chỉnh với tên BackupConfigFile chưa? Đó không phải là một hành động tùy chỉnh chuẩn mà Windows Installer sẽ cung cấp cho bạn. – Adkins

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