3

私は、次のMSIプロパティの値を検索するいくつかのカスタムアクションを使用してインストーラーに取り組んでいます。

  • ADDLOCAL
  • ADDDEFAULT
  • 再インストール
  • 削除する

フルUIでインストーラーを実行する場合、これらのプロパティには、ユーザーが選択したオプションを指定して、必要に応じてコンマ区切りの機能名のリストが含まれます。ただし、インストーラーをパッシブモードで実行するか、コマンドラインから基本UIのみ(またはUIなし)で実行すると、プロパティが空/空白であることがわかります。それらに値があるのは、コマンドラインから明示的に設定した場合のみです。これは許容できる回避策ですが、コマンドラインで値を渡す必要なしに、これらが「all」などのある種のデフォルトをとることができれば、はるかに優れています。WiX(MSIの構築に使用している)でこれを指定する方法はありますか、それともカスタムアクションコード(または完全に他の何か)で何かを行う必要がありますか?

ここでプロパティリファレンスを見てきましたが、これらのプロパティのデフォルト機能を指定する方法については何も言及されていません。

また、インストール中にコマンドラインでこのように機能を指定すると、アンインストール用にREMOVEプロパティに保存されているように見えます(つまり、アンインストール時にパラメータを渡す必要がないことも興味深いです。モード)。これは私が信頼できる機能ですか?後で誰かがインストールを変更した場合、自動的に更新されますか?

WiX 3.5.2519を実行していて、カスタムアクションコードにVisualC++でVisualStudio2010を使用しています。あなたが私に与えることができるどんな助けにも感謝します!

編集:

実際、私は間違っていました。コマンドラインで別の値を渡したり、機能のサブセットのみをインストールしたりしても、これらのモードのいずれかでアンインストールして実行すると、REMOVEプロパティは常に「all」に設定されているようです。これは壊れているようです。私はここで何か間違ったことをしていますか?

C:\> msiexec REMOVE=FeatureName /passive /l* uninstall.log /x Product.msi

「FeatureName」に指定したものを完全に無視し、代わりに「all」を使用します。

4

2 に答える 2

4

カスタムアクションは、おそらくこれらのプロパティを調べるべきではありません。代わりに、何をしようとしているかに応じて、製品の機能やコンポーネントの状態を調べる必要があります。条件付きステートメントの構文では、これは$component-actionorのよう&feature-actionになります(アクションを条件付けしようとしているコンポーネントまたは機能の名前を使用します)。MsiGetFeatureStateC ++(カスタムアクション内の場合)では、これはまたはのように見えます。もちろん、これらは他のほとんどの言語(使用してはいけない言語の/MsiGetComponentStateなど)でも同様の方法で使用できます。session.FeatureRequestStatesession.ComponentRequestState

于 2012-10-24T12:00:21.717 に答える
0

インストールで使用されるすべてのプロパティは、初期値を使用してプロパティテーブルに入力することをお勧めします。インストーラーは、インストールの開始時にプロパティをこれらの値に設定します。ブランクが許容値であり、インストーラーに組み込まれているプロパティを初期化する必要がないプロパティ。

次に、「プロパティの使用」で説明されているように、プログラムまたはコマンドラインでデフォルト値を変更できます

于 2012-10-23T17:54:12.387 に答える