First, let me define what I mean by saying private property. Normally, properties can be set using scripting such as follows:
<Property Id="CHECKREGISTRY">
<RegistrySearch Id="CheckRegistryKey"
Root="HKLM"
Key="SOFTWARE\Foo"
Name="Bar"
Type="raw" />
</Property>
<Condition Message="You don't have the required permission to install this tool.">
<![CDATA[Installed OR CHECKREGISTRY]]>
</Condition>
But the problem is that you can bypass this check by simply running a script like this:
msiexec.exe /i FooInstaller.msi /quiet CHECKREGISTRY="#1"
and that is against the very first idea that you should have the registry key to be able to do what you want to do.
As you see, a private property -- if exists -- would prevent this and allow being able to set only from within the MSI installer itself.
I was thinking to go to CustomAction route, but for a very simple thing, it is overly complicated. Is there any simple solution to this problem, or how can we define private properties in the first place?