Windowsサービスをインストールして開始するためのアカウントとパスワードが必要なMSIを作成しました。そのために、 'Product'要素にいくつかのプロパティを追加しました。私は、これらのプロパティをアップグレードを実行するために再提供する必要はないはずです。これらのプロパティの1つがパスワードであるため、レジストリ(または任意の場所)に値を保持する必要はありません。私は今、私は同様のexeファイルは、プロパティの値を受け取り、MSIにそれらを渡す必要があります、それの前提で、このMSIをバンドルするexeファイルのブートストラップをオーサリングしていますので、私はしましたパスワードの補充なしのWixバンドルアップグレード
<MajorUpgrade ... Schedule="afterInstallExecute" />
でこれを達成していますいくつかの 'Variable'要素をバンドルに追加し、それらを子要素 'MsiProperty'を持つ 'MsiPackage'要素に渡しました。これは最初のインストール時に値が提供されたときにはうまくいきますが、プロパティの値を指定せずにバンドルをアップグレードするときに、ブートストラップがMSIに空の値を渡します。 ...
msiexec /i MyMsi.msi ACCOUNT= PASSWORD=
これはアップグレードを中断します。新しいバージョンのWindowsサービスが、アカウントとパスワードの空の値で開始しようとしています。
条件付きで変数値をMSIのプロパティ値に渡す方法はありますか?
'変数'要素の属性 'Hidden'と 'Persisted'の両方が設定されているとどうなりますか?パスワードは本当に隠されますか?
わからない/考えていない別のパターンがありますか?
このようなことは、カスタムアクションが必要なように感じられません。
それは私が説明した状況のために働く。しかし、WebAppPoolだけでなくWindowsサービスとも非常によく似た状況にあります。どのように私は同じことを達成することができますか?そしてなぜウィックスは矛盾しているのですか? –
そして、塩漬けされた&ハッシュされたパスワードをレジストリに保存する際の問題は、インストールパスワードとアップグレードディレクトリの間でWindowsまたはActive Directoryによってアカウントパスワードが変更される可能性があることです。 –
AppPoolの問題を解決するために、 WIX_UPGRADE_DETECTED SetProperty>を使用することができました。あなたの答えは質問の問題を解決したので、ポイントを得る。 –