0

カスタムアクションがあります

<CustomAction Id="SqlCmdExeRESTORE" BinaryKey="WixCA" DllEntry="CAQuietExec" Return="check" Execute="deferred" Impersonate="yes" />
<CustomAction Id="SqlCmdRESTORE" Property="SqlCmdExeRESTORE" Value="&quot;[SQLBINDIR]sqlcmd.exe&quot; -S .\MYDB -U sa -P MyPass -Q &quot;RESTORE DATABASE MYDB FROM  DISK = N'[MSSQLDIR]\Backup\MYDB.bak'&quot;" />

カスタムアクションにエラーがあり、再度実行した場合に、ユーザーが正しいパスワードを書き込むダイアログを表示するにはどうすればよいですか。

アイデアをありがとう

4

1 に答える 1

1

これは正しい方法ではありません。カスタム アクションは、ユーザーとやり取りする UI を表示すべきではありません。たとえば、サイレント (無人) インストール中のこのようなアクションの動作を想像してみてください。

インストール プログラムの UI 段階で、ユーザーにパスワードを尋ねる必要があります。つまり、テキスト ボックスの SQL 名/パスワードのペアを含むダイアログを表示し、これらのテキスト ボックスを MSI プロパティに関連付けて、入力した値を保存します。後で、適切なプロパティ値をカスタム アクションに渡します。

<CustomAction Id="SqlCmdRESTORE" Property="SqlCmdExeRESTORE" Value="&quot;[SQLBINDIR]sqlcmd.exe&quot; -S .\MYDB -U [SQLUSER] -P [SQLPASS] -Q &quot;RESTORE DATABASE MYDB FROM  DISK = N'[MSSQLDIR]\Backup\MYDB.bak'&quot;" />

これは、質問の範囲内での迅速な解決策でした。ただし、指摘したい設計上の問題がいくつか明らかになります。

まず、EXE カスタム アクションをできるだけ避けるようにしてください。その理由を説明するソースの1 つを次に示します。たとえば、あなたの場合、カスタム アクションは、ADO.NET を使用して SQL サーバーに対処する C# カスタム アクションにリファクタリングできます。ほんの一例です。

また、ターゲット システムを変更するカスタム アクションは、常に適切なロールバック アクションとペアにする必要があります。ロールバックの場合、システムはインストール開始時の状態のままにしておく必要があります。

于 2012-09-17T12:33:06.807 に答える