1

NSIS wikiで説明されているように、NSISインストーラーから永続的な環境変数を設定しています。これは期待どおりに機能し、インストール後に新しいプロセスで変数を使用できるようになります。

ただし、インストールの最後にインストールされたプログラムを起動するオプションを使用する場合、インストーラーから開始されたそのプログラムの環境変数は使用できません。これは、そこで開始されたプログラムが親としてインストーラープロセスを持ち、同じ環境ブロックを取得するためだと思います(createProcess関数のlpEnvironment引数を参照)。

インストーラーの最後のページからプログラムを開始して、新しく設定された環境変数を表示するにはどうすればよいですか?代わりにカスタム起動関数を作成しますか?ドキュメントには、関数の環境ブロックについては何も記載されていませんExec

4

1 に答える 1

2

Explorer.exe のみが WM_WININICHANGE 通知に応答するため、子プロセスに (更新された) 環境を継承させたい場合は、環境変数を一時的に設定するコードも使用する必要があります。

outfile "test.exe"
name "run env test"
requestexecutionlevel user
!define MUI_FINISHPAGE_RUN "cmd.exe"
!define MUI_FINISHPAGE_RUN_PARAMETERS  "/k set foobar"
!include MUI2.nsh
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"

Section
System::Call 'Kernel32::SetEnvironmentVariable(t "FooBar",t "BazBlargh")i'
SectionEnd
于 2012-07-17T14:18:02.883 に答える