2011-12-16 29 views
6

Tôi có trình cài đặt được tác giả với Wix. Trong trình hướng dẫn giao diện người dùng, có một hộp kiểm mặc định để kiểm tra. Tôi muốn lưu giá trị của hộp kiểm này vào sổ đăng ký để thay đổi, sửa chữa và nâng cấp bằng cách sử dụng (phiên bản đơn giản hơn) "Remember Property" pattern được mô tả bởi Rob Mensching.Lưu giá trị hộp kiểm Wix mặc định để kiểm tra sổ đăng ký

Việc thực hiện hộp kiểm:

<Control Id="httpsCheckBox" Type="CheckBox" CheckBoxValue="true" X="30" Y="119" Width="139" Height="17" Text="Enable HTTPS services" Property="ENABLEHTTPS" /> 

Định nghĩa bất động sản:

<Property Id="ENABLEHTTPS" value="true"> 
     <RegistrySearch Id="EnableHttpsRegistrySearch" Type="raw" Root="HKLM" Key="SOFTWARE\CompanyName\ProductName" Name="EnableHttps" /> 
    </Property> 

Và tài sản được ghi vào sổ đăng ký ở đây:

<Component Id="RegistryEntries"> 
     <RegistryKey Root="HKLM" Key="SOFTWARE\CompanyName\ProductName"> 
      <RegistryValue Name="EnableHttps" Value="[ENABLEHTTPS]" Type="string" /> 
     </RegistryKey> 
    </Component> 

Các cài đặt ban đầu công trình tốt. Giá trị trong sổ đăng ký là "true" nếu hộp kiểm được chọn trái hoặc trống nếu nó được bỏ chọn.

Lần sau khi trình cài đặt được chạy, để cài đặt một tính năng mới chẳng hạn, hộp kiểm luôn được chọn bất kể giá trị trong cài đặt đăng ký.

Nếu tôi xóa giá trị mặc định khỏi định nghĩa thuộc tính sao cho hộp kiểm này được bỏ chọn lần đầu tiên trình cài đặt được chạy, mọi thứ hoạt động tốt. Lần sau khi trình cài đặt chạy hộp kiểm (và thuộc tính) có giá trị chính xác từ sổ đăng ký.

Giống như RegistrySearch không đặt thuộc tính nếu giá trị đăng ký trống.

Tôi có làm gì sai không? Hoặc có cách nào tốt hơn để làm điều này?

Trả lời

7

Về cơ bản, phần tử sẽ sử dụng giá trị mặc định nếu mục nhập sổ đăng ký không được tìm thấy hoặc null và đó là những gì bạn đang gặp phải.

Xem tài liệu ở đây: http://wix.sourceforge.net/manual-wix3/wix_xsd_registrysearch.htm

Đây là một giải pháp cho vấn đề này: http://www.mail-archive.com/[email protected]/msg32524.html

<Property Id="ENABLEHTTPS" > 
     <RegistrySearch Id="EnableHttpsRegistrySearch" Type="raw" Root="HKLM" Key="SOFTWARE\CompanyName\ProductName" Name="EnableHttps" /> 
    </Property> 

    <CustomAction Id="SetENABLEHTTPS" Property="ENABLEHTTPS" Value="1" Execute="firstSequence" /> 

    <Control Id="httpsCheckBox" Type="CheckBox" CheckBoxValue="1" X="30" Y="119" Width="139" Height="17" Text="Enable HTTPS services" Property="ENABLEHTTPS" /> 

    <InstallUISequence> 
     <Custom Action="SetENABLEHTTPS" Before="AppSearch">NOT Installed AND NOT OLDERVERSIONDETECTED</Custom> 
    </InstallUISequence> 
    <InstallExecuteSequence> 
     <Custom Action="SetENABLEHTTPS" Before="AppSearch">NOT Installed AND NOT OLDERVERSIONDETECTED</Custom> 
    </InstallExecuteSequence> 
+0

Cảm ơn Rami. Điều đó làm việc một điều trị. – Smiffy

6

Dưới đây là một ví dụ mà cũng làm việc với một tài sản mà còn tôn trọng nếu giá trị tài sản mặc định được sửa đổi thông qua một chuyển đổi MSI (MST), dòng lệnh hoặc nếu giá trị đã tồn tại trong sổ đăng ký sau khi được thiết lập thông qua chính sách nhóm (tức là mọi trường hợp cạnh tôi có thể tìm thấy!)

<Property Id='MYPROP' Secure="yes" Admin="yes" Value='-1'> 
    <RegistrySearch Id='RegSearch_MYPROP' Root="HKLM" 
        Key="SOFTWARE\CompanyName\ProductName" 
        Name='MYPROP' Type='raw' /> 
</Property> 

<CustomAction Id='MYPROPSaveCmdLine' Property='CMDLINE_MYPROP' 
       Value='[MYPROP]' Execute='firstSequence' /> 
<CustomAction Id='MYPROPSetFromCmdLine' Property='MYPROP' 
       Value='[CMDLINE_MYPROP]' Execute='firstSequence' /> 
<CustomAction Id='MYPROPClearCheckbox' Property='MYPROP' 
       Value='{}' Execute='firstSequence'/> 
<CustomAction Id='MYPROPSaveCheckboxOff' Property='MYPROP' Value='0' /> 
<CustomAction Id='MYPROPSaveCheckboxOn' Property='MYPROP' Value='1' /> 

<InstallUISequence> 
    <Custom Action='MYPROPSaveCmdLine' Before='AppSearch'>MYPROP &lt;&gt; -1</Custom> 
    <Custom Action='MYPROPSetFromCmdLine' After='AppSearch'>CMDLINE_MYPROP</Custom> 
    <Custom Action='MYPROPClearCheckbox' After ='MYPROPSetFromCmdLine'>MYPROP=0</Custom> 
</InstallUISequence> 
<InstallExecuteSequence> 
    <Custom Action='MYPROPSaveCmdLine' Before='AppSearch'>MYPROP &lt;&gt; -1</Custom> 
    <Custom Action='MYPROPSetFromCmdLine' After='AppSearch'>CMDLINE_MYPROP</Custom> 
    <Custom Action='MYPROPClearCheckbox' After ='MYPROPSetFromCmdLine'>MYPROP=0</Custom> 
    <Custom Action='MYPROPSaveCheckboxOff' Before='InstallInitialize'>Not MYPROP Or MYPROP=0</Custom> 
    <Custom Action='MYPROPSaveCheckboxOn' Before='InstallInitialize'>MYPROP And MYPROP &lt;&gt; 0</Custom> 
</InstallExecuteSequence> 
Các vấn đề liên quan