2017-07-26 8 views
1

まず、プライベートプロパティと言うことを定義しましょう。Wixインストーラでプライベートプロパティを定義する

<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> 

をしかし、問題は、あなたは、単にこのようなスクリプトを実行することにより、このチェックをバイパスすることができるということです:

msiexec.exe /i FooInstaller.msi /quiet CHECKREGISTRY="#1" 

とは、非常に反している。通常、プロパティは次のようなスクリプトを使用して設定することができますあなたがしたいことをするためにレジストリキーを持っているべきであるという最初の考え。

ご覧のとおり、プライベートプロパティ(存在する場合)によってこれが防止され、MSIインストーラ自体からのみ設定できるようになります。

私はCustomActionに行くと思っていましたが、非常に簡単なことは、あまりにも複雑です。この問題に対する簡単な解決方法はありますか、または私たちはまずプライベートプロパティをどのように定義できますか?

答えて

2

プライベートプロパティは、小文字の名前を付けて作成できます。パブリックプロパティはすべて大文字です。

ただし、AppSearchを使用してプライベートプロパティを設定することはできません。

MSIデータベースを検査して実際のセキュリティがないことを覚えておいてください。あなたが得ることができる最良のものは、難読化するカスタムアクションを使用することです。

+0

ありがとうございます。少なくとも、それが他のスクリプトやインストーラの一部であることを妨げます。私はこのオプションがあることをうれしく思っています。どうもありがとう! – Tarik

+0

"CNDL0012エラー:プロパティ/ @ Id属性の値 'checkRegistry'に小文字を含めることはできません。これは検索プロパティなのでパブリックプロパティでもなければなりません。完全に大文字でなければなりません。(32) " – Tarik

+1

右。 'しかし、あなたはプライベートプロパティを設定するためにAppSearchを使用することはできません。 ' –

2

大文字のみのプロパティはpublicです。プライベートにするには、小文字を使用します。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa371245(v=vs.85).aspx

は、コマンドラインで設定されている公共の財産を心配している場合は、単に明示的にAppSearch前に空の値に設定します。

+0

ソースを共有していただきありがとうございます。 +1 – Tarik

関連する問題