10

インストールが完了した後、この方法で Windows アプリケーションを起動しています。

!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchApplication"

...

Function LaunchApplication
    ExecShell "" "$INSTDIR\Application.exe"
FunctionEnd

しかし、これには奇妙で望ましくない副作用があります。どうやら私のアプリケーションは管理者権限で起動されたようです。

Web ブラウザー (Firefox と IE でテスト済み) とアプリケーションの間でデータをドラッグ アンド ドロップできません。

アプリケーションを終了し (NSIS から開始されたセッション)、スタート メニュー アイコンから再起動すると、すべてが機能します。- 問題なくブラウザにドラッグ アンド ドロップできます。

したがって、インストールの最初にUACリクエストがあるため、インストール後に起動しているプロセスに何らかの形でUAC権限が転送されているのではないかと思います。ブラウザーは低セキュリティ プロセスで実行されるため、Windows はブラウザーとのデータ交換を拒否します (NSIS で起動されるプロセス インスタンス内)。

この UAC/セキュリティの問題が発生しないように、NSIS から exe を起動する方法は?

4

4 に答える 4

8

Anders が述べたように、プラグインShellExecAsUserを使用することをお勧めします。私はこれを次のようにまったく同じ目的で使用します。

!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApplication

...

Function LaunchApplication
   SetOutPath $INSTDIR
   ShellExecAsUser::ShellExecAsUser "" "$INSTDIR\Application.exe" ""
FunctionEnd

SetOutPath を使用して、Application.exe がインストール フォルダーを現在のディレクトリとして開始するように注意してください。ShellExecAsUser はこれを設定しません。

于 2013-05-29T16:18:55.953 に答える
4

使用するExec '"$WINDIR\explorer.exe" "$TEMP\MyUnElevatedProcess.exe"'

http://mdb-blog.blogspot.com/2013/01/nsis-lunch-program-as-user-from-uac.htmlから取得

于 2013-05-15T05:03:57.670 に答える
3

UAC プラグインを使用してこの問題を回避できますが、少し使いにくいです。ShellExecAsUserを試すこともできますが、実行チェックボックスをまったく使用しないことをお勧めします...

于 2013-05-15T09:34:48.910 に答える