1

私はWIXを初めて使用し、次のことを行うインストーラーの作成を任されています。

*アプリケーションのApp.Configファイルを上書きせずにアプリケーションのビルドをデプロイします

* App.Configファイルにキー/値をロードし、ユーザーに「デフォルト」(既存の値)を要求し、終了する前にそれらを変更できるようにします

*ユーザーが指定した値(またはユーザーが変更を加えなかった場合はデフォルト)をApp.Configファイルに保存して、アプリケーションで使用できるようにします。

WIXダイラログとカスタムアクションが正常にレイアウトされました。InstallFinalizeの後、「LoadDefaultOptions」CustomActionが実行されます。これにより、インストールディレクトリとアプリ構成ファイル名が正常に取得され、XMLリーダーに読み込まれ、キーが解析されます。値のペア。次の方法でセッション変数に設定します。

session[key.toUpper()] = value;

私のカスタムアクションは次のように定義されています:

<CustomAction Id="LoadDefaultOptions" Return="asyncWait" Execute="immediate" BinaryKey="aeserverDbDialogPackage.dll" DllEntry="LoadDefaultOptions"/>
<CustomAction Id="SetConfigOptions" Return="check" Execute="immediate" BinaryKey="aeserverDbDialogPackage.dll" DllEntry="SetConfigOptions"/>

LoadDefaultOptionsは次のように実行されます。

<Custom Action="LoadDefaultOptions" After="InstallFinalize" />

カスタムダイアログの編集プロパティを次のように設定しています。

<Control Id="CCPDbConnString" Type="Edit" X="20" Y="62" Width="150" Height="18" Property="CCPCONNECTIONSTRING" Indirect="no" />

WXSファイルの前半に次のような一致するプロパティタグがあります。

<Property Id="CCPCONNECTIONSTRING" Secure="yes" ></Property>

...そして、LoadDefaultOptions customActionは、次のようにセッション変数を上書きします。

session["CCPCONNECTIONSTRING"] = <value parsed from file>;

セッションログによると、これは期待どおりに機能し、xml解析が機能し、セッション変数が設定されます。

私の問題は、LoadDefaultOptions CustomActionが実行された後、カスタムダイアログが表示され、保存されているデフォルトをユーザーに表示することです。セッション変数のORIGINALプロパティ値は、xmlファイルを介してデフォルトをロードしてセッションに保存したカスタムアクションによって上書きされるのではなく、「スタック」しているように見えます。(元のプロパティが定義されているため空白です。別の方法で定義した場合は、セッションで書き込まれた値の代わりにそれらの値が表示されます)

カスタムアクションによってオーバーライドされたセッション変数をダイアログに「読み取る」にはどうすればよいですか?

最終的には、アプリの構成からこれらの値をロードし、終了画面からオプションのダイアログプロンプトでユーザーにプロンプ​​トを返し(これまでのところ、更新されたセッション変数を取得しないことを除いて)、そのプロンプトダイアログからコマンドを実行します、別のカスタムアクションを実行して、カスタムダイアログから提供された設定でApp.Configファイルを再書き込みします。

セッション変数をPERSISTに取得できません!!!

何か案は?この方法でセッションを使用しようとすると、完全にベースから外れますか?他にどのようにapp.configファイルを解析し、インストールユーザーがセッション以外でアプリ設定を変更できるようにすることができますか?

4

2 に答える 2

1

どうやら、私がやろうとしていることの一部は多かれ少なかれ不可能です...ダイアログで使用するためにInstallExecuteSequenceのセッション変数を変更することはできません...これはInstallUISequenceでのみ行うことができます...

したがって、最初のインストールでApp.Configからユーザーを読み取ってプロンプトを表示することはできません。これは、ファイルが実行可能な期間中に展開されることは決してないためです。これが機能するのは、 App.Configファイルが、元のインストールが行われたのと同じ場所にある以前のインストールから存在する場合のアップグレード。

この観点から、新規インストール中にデフォルト設定をNO(またはハードコーディング)して、アップグレードインストール中に既存のapp.config設定を解析してデフォルトとして使用することを試みます...それ私の要件を処理する必要があります!

于 2010-07-13T14:11:10.307 に答える
0

InstallFinalizeの後にカスタムアクションをスケジュールすると、管理されたインストール/UACタイプのストーリー中に昇格して実行されません。また、質問があります。この構成データを、初回実行パターンとして管理しやすいアプリケーションに移動することを検討しましたか?

于 2010-07-08T22:07:02.590 に答える