2009-04-02 24 views
14

Tôi muốn khẳng định rằng một giá trị registry nào đó tồn tại sau khi cài đặt, vì vậy tôi đã thêm các thành phần sau đây:WiX: Làm cách nào để ngăn chặn giá trị đăng ký bị xóa khi gỡ cài đặt?

<Component Id="RegistryEntryContextMenuOdt" Guid="4BA5BA24-4F65-4BDF-99EB-CB4B947F31A9" DiskId="1" KeyPath="yes"> 
    <RegistryKey Id="RegKeyOdt" Root="HKCR" Action="create" Key=".odt"> 
     <RegistryValue Type="string" Value="openDocument.WriterDocument.1" /> 
    </RegistryKey> 
</Component> 

Chìa khóa/giá trị đã có thể được thiết lập trước khi cài đặt. Tuy nhiên, tôi muốn rằng giá trị được đặt thành giá trị cụ thể của tôi, nghĩa là giá trị đó sẽ được ghi đè bằng giá trị của tôi.

Vấn đề của tôi bây giờ là giá trị này là luôn luôn bị xóa khi sản phẩm của tôi bị gỡ cài đặt. Tuy nhiên, tôi chỉ muốn xóa giá trị nếu nó được trình cài đặt của tôi thêm vào. Nếu trình cài đặt của tôi vừa sửa đổi giá trị, giá trị trước đó sẽ được khôi phục (hoặc, nếu điều này là không thể, giá trị của tôi sẽ không bị ảnh hưởng).

Xin lưu ý rằng chính khóa đó không bị xóa khi gỡ cài đặt. Điều này có vẻ hoạt động chính xác vì tôi đã chỉ định Action="create" trên phần tử RegistryKey.

Có thể thiết lập tương tự cho RegistryValue sẽ tạo giá trị nhưng không xóa nó khi cài đặt?

CẬP NHẬT: Cả hai khóa đăng ký trong HKCR đều có cài đặt máy rộng, nghĩa là chúng bắt nguồn từ nhánh HKLM \ SOFTWARE \ Classes của sổ đăng ký.

Trả lời

23

Bạn có thể đảm bảo rằng thành phần của bạn chỉ được cài đặt khi mục đăng ký không tồn tại bằng cách sử dụng thuộc tính NeverOverwrite của Component element. Từ các tài liệu wix cho NeverOverwrite:

Nếu thuộc tính này được thiết lập để 'có', trình cài đặt không cài đặt hoặc cài đặt lại các thành phần nếu một chìa khóa con đường tập tin hoặc thư mục đường dẫn registry key cho thành phần đã tồn tại.

Bạn cũng có thể cần phải thiết lập các thuộc tính KeyPath trên các yếu tố Registry-yes để làm cho nó rõ ràng rằng mục registry là con đường chính thành phần.

Nếu bạn muốn đặt giá trị đăng ký ngay cả khi nó đã tồn tại, nhưng bạn không muốn xóa nó khi gỡ cài đặt, thì bạn có thể sử dụng thuộc tính Permanent của thành phần Thành phần thay thế.

+0

Cảm ơn, điều này rất hữu ích. Hãy để tôi kiểm tra điều này :-) –

+1

+1 cho nhận xét KeyPath! –

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