'Remember Property' pattern and the property used in RadioButtonGroup

£可爱£侵袭症+ 提交于 2019-12-24 02:13:46

问题


I'm trying to save the property value in registry during setup and read it next time installation is run. I follow 'Remember property' pattern as described here

It basically works as expected, but I cannot get one scenario working:

  • I run setup (property gets stored in the registry)
  • I run setup again without entering property value on command line
  • I expect value of the property to be read from registry, but it is assigned default value.

I think, I know where is the problem: I have "Value" assigned to the property, while the example I've mentioned above, declares "remembered" property without "Value". In my package, I have to define the value as I use the property in UI element with RadioButtonGroup. If I don't declare Value field of the property, I get compilation error:

 error LGHT0204 : ICE34: Property LOCATION (of RadioButtonGroup control LocationSelection.InstallationLocation) is not defined in the Property Table.

Can anybody give me a hint how to manage it?


回答1:


Here is solution draft:

Custom actions to fill properties

<CustomAction Id='SaveCmdLineValueLocation' Property='CMDLINE_LOCATION'
              Value='[LOCATION]' Execute='firstSequence' />
<CustomAction Id='SetFromCmdLineValueLocation' Property="EFFECTIVE_LOCATION"
              Value='[CMDLINE_LOCATION]' Execute='firstSequence' />
<CustomAction Id='SetFromRegValueLocation' Property="EFFECTIVE_LOCATION"
              Value='[REG_LOCATION]' Execute='firstSequence' />

Execute sequence that assignes EFFECTIVE_LOCATION either from registry or msiexec command line:

<InstallExecuteSequence>
      <Custom Action='SaveCmdLineValueLocation' Before='AppSearch'>
        LOCATION
      </Custom>      
      <Custom Action='SetFromCmdLineValueLocation' After='AppSearch'>
        CMDLINE_LOCATION
      </Custom>
      <Custom Action='SetFromRegValueLocation' After='AppSearch'>
        REG_LOCATION AND (NOT CMDLINE_LOCATION)
      </Custom>
</InstallExecuteSequence>

Properties declaration:

<!-- Property used on command-line. -->
<Property Id="LOCATION" Secure="yes">
</Property>

<!-- Property used finally with ReadioButtonGroup. It must have Value assigned (required when used with RadioButtonGroup -->
<Property Id="EFFECTIVE_LOCATION" Value="OFFICE" Secure="yes">
</Property>

<!-- Read previous value from registy (from recent installation) -->
<Property Id="REG_LOCATION" Secure="yes">
  <RegistrySearch Id="loc" Root="HKLM" Key="SOFTWARE\Company\Product" Type="raw" Name="LOCATION"  Win64='yes'>
  </RegistrySearch>
</Property>


来源:https://stackoverflow.com/questions/35133889/remember-property-pattern-and-the-property-used-in-radiobuttongroup

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!