0

私は次の順序で(とりわけ)実行する NSIS インストーラーに取り組んでいます。

  1. UACを使用して昇格して実行します(これは、インストーラーによって作成された他のものに必要です)
  2. explorer.exe を閉じます
  3. explorer.exe を起動します (Exec コマンドを使用)
  4. インストールされた実行可能ファイルを起動し、起動したユーザーと同じユーザーとして実行します (Exec コマンドを使用)

そしてすべてがうまくいきます。

現在、インストーラーはサービスによって起動するように要求されています。これは、エクスプローラーとインストールされたプログラムの両方で終了し、SYSTEM として起動されます。

インストーラーを変更して、現在ログインしているユーザーとしてプログラムを実行するにはどうすればよいですか?

手順 2 ~ 3 がなかったら、Explorer を使用して実行可能ファイルを起動できますが (これは機能します)、現在のユーザーとして explorer.exe を停止して起動する必要があるため、これは私のニーズには合いません。

どうすればそれを達成できますか?

4

1 に答える 1

0

シェル拡張機能をインストールしているために Explorer を再起動している場合、これには欠陥があります。シェル拡張は、いつでも任意のプロセスにロードできます (GetOpenFilename() など)。使用中のファイルの名前を変更し、後で FILE_FLAG_DELETE_ON_CLOSE や MoveFileEx を使用して削除する必要があります。

他の理由 (理由) で Explorer を再起動する場合は、OpenProcessToken (または Explorers トークンを取得できなかった場合は WTSQueryUserToken) からのトークンを使用して再起動することをお勧めします。

于 2013-10-25T22:19:44.143 に答える