私はこの問題を数日間は取り組んでいますが、「良い」解決策を見つけることができません。WiX .NETカスタムアクションメソッドの即時カスタムアクションを昇格することは可能ですか?
タスクは、 'netsh advfirewall firewall add ...'への呼び出しをラップするPowerShellスクリプトを実行しています。明らかに、これには昇格された権限が必要です。また、このPowerShellスクリプトでは、成功または失敗のために異なる終了コードが設定されています。遅延WiXカスタムアクションを定義するとすべて正常です。成功した場合、ファイアウォール変更の成功に関するダイアログが表示され、失敗した場合はインストールがロールバックされます。しかし、私たちの顧客は、インストーラを持っているのが好き:
するためには、「PowerShellスクリプトが失敗した場合、MSIインストールのロールバックをさせますが、インストールの最後にUIダイアログ上のいくつかの素晴らしい警告メッセージを表示しない」
別の終了コードを折り返し、.NETカスタムアクションを追加してPowershellスクリプトをC#メソッドで呼び出し、CustomActionDataプロパティとしてMSIインストーラに戻してみました。残念ながら、私はこれを達成できませんでした。遅延アクションがMSIデータベースとやりとりすることができないと考えています。このポストstackoverflow questionを参照してください。
.NETカスタムアクションの終了コードを返すために、「即時」アクションがプロパティを設定すると思います。私はデフォルトで「即時」のアクションは昇格できないことを知っていましたが、.NETカスタムアクションメソッドではPowershell ScriptをC#メソッドの管理者として強制的に実行できますか?
一般に、私たちの目標を達成するための他の方法はありませんか?ちょうど要約:
- 昇格された権限でPowerShellを実行します。
- Powershellスクリプトが失敗した場合は、インストールをロールバックしないでください。代わりに、別のPowershellスクリプト終了コードで異なるUIを表示してください。
いずれの回答もありがとうございます。ありがとうございました。
あなたがActionResult.Successを返すと、インストールをロールバックできません。 (両方の句で)try catchを実行しようとします。失敗するとcatchに戻り、successを返します。evelated特権として、ユーザに管理者として実行するように頼むことができます –
@FromStuckToFlow、ありがとうあなたの返事のために。 C#カスタムアクションメソッドでは、WiX側の 'immediate'定義で制御されませんか? UACウィンドウを表示することで、壮大な管理者にいつでも頼むことができますか? – Chloe
これは、InstallExecuteSqeuenceと設定方法に応じて実行されます。管理者として実行するように依頼するBefore = "InstallInitialize" –