異なるコンテキストでMSI(wix)から通常のユーザーとしてプロセスを実行する
-
03-07-2019 - |
質問
社内で使用しているソフトウェアのインストーラーを設定しようとしています。
インストーラーはSMSを介してターゲットマシンにプッシュされ、次の手順を実行します。
- 現在実行中のアプリのインスタンスを終了します(アプリはユーティリティであるため、ユーザーへの影響はありません)。
- 以前のバージョンを削除します。
- 更新されたバージョンをインストールします。
やりたいことは、ステップ3が完了すると、インストールされた実行可能ファイル(SMSジョブを実行するシステムアカウントではなく、現在ログインしているユーザーとして)を起動することです。
次のようにカスタムアクションを追加しようとしました:
<CustomAction Id="Relaunch" Impersonate="yes" Return="asyncNoWait" FileKey="AppExeFile" Execute="commit" ExeCommand="acm" />
そして InstallExecuteSequence
要素には次のものがあります:
<Custom Action="Relaunch" OnExit="success" />
ただし、SMSジョブとして、または管理者として実行しても、何も起こりません(アプリが再起動されないなど)。
提案はありますか
解決 2
残念ながら、これは不可能だと思われます。コードで必要なことを何らかの方法で行うMSIの拡張機能を作成するオプションかもしれません。
SMSを使用してチェーンパッケージを送信することを決定しました。これは、アプリケーションを実行する主なパッケージであり、最初に実行されるインストーラーに依存します。
これが他の誰かに役立つことを願って:)
他のヒント
私が思いついた解決策は、ログイン時にRunレジストリキーを使用してユーティリティを起動し、現在のユーザーが「SYSTEM」の場合、インストール中にユーティリティが起動しないようにすることです。 -これはSMSを使用したものではなく、AD / GPO展開を使用したものです。ただし、一部のお客様はSMSを使用しており、これがお客様に有効なソリューションでした。
Vista / Server 2008 UACの同様の問題、私が思いついた唯一の信頼できる解決策は、ユーザーが正しいユーザーコンテキストでユーティリティにログインし直したときに再起動をスケジュールすることです。
かなりの調査を行ってMSIドキュメントを調べましたが、別のユーザーとしてバックグラウンドユーティリティを起動する特権を下げることは実際には不可能であるようです。