2016-09-06 7 views
0

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'の両方が設定されているとどうなりますか?パスワードは本当に隠されますか?

わからない/考えていない別のパターンがありますか?

このようなことは、カスタムアクションが必要なように感じられません。

答えて

1

アップグレード時に<InstallServices>標準動作を無効にすることができます。私は、次のしていると連携製品の一つで

<!-- http://stackoverflow.com/questions/15965539/how-to-only-stop-and-not-uninstall-windows-services-when-major-upgrade-in-wix don't change service config on upgrade --> 
<DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>    
<InstallServices>NOT WIX_UPGRADE_DETECTED OR V6INSTALLED</InstallServices> 

を私は、サービスの開始種類をリセットしたくなかったので、ユーザはそれらを自動的に起動し、手動ではなく、することを決定しましたさ(これを設定するのは当社製品のオプションです)。ログインユーザのために、空のparmetersでそれをアップグレードする代わりに、再追加しようとしているときのようにこれを行うことにより、

、それがサービスを離れ、既にをインストールしなければならない/


を渡す代わりであります暗号化されたパスワードのハッシュを作成し、ユーザに保存し、パスワードを&に暗号化してレジストリに保存します。アップグレードでは、これらの値を読み取ってパスワードをデコードし、それらの値を使用することができます。

+0

それは私が説明した状況のために働く。しかし、WebAppPoolだけでなくWindowsサービスとも非常によく似た状況にあります。どのように私は同じことを達成することができますか?そしてなぜウィックスは矛盾しているのですか? –

+0

そして、塩漬けされた&ハッシュされたパスワードをレジストリに保存する際の問題は、インストールパスワードとアップグレードディレクトリの間でWindowsまたはActive Directoryによってアカウントパスワードが変更される可能性があることです。 –

+1

AppPoolの問題を解決するために、 WIX_UPGRADE_DETECTEDを使用することができました。あなたの答えは質問の問題を解決したので、ポイントを得る。 –

関連する問題