アプリケーションのシステム変数パスに環境変数を設定したいと考えています。nsis を使用してどのように設定できますか?
例: C:\Program Files\Sample\bin
、このパスをシステム変数に設定します。
アプリケーションのシステム変数パスに環境変数を設定したいと考えています。nsis を使用してどのように設定できますか?
例: C:\Program Files\Sample\bin
、このパスをシステム変数に設定します。
これを行うにはいくつかの方法があります。インストーラーだけでなく、これを永続的に設定したいと思います
他の回答で述べたように、ns::Exec または ExecWait を使用して setx を実行できます。これの欠点は、 setx が Windows Vista 以降にしか付属していないことです。Windows XP ユーザーには、パスが設定されていません。SET コマンドはプロセス専用であり、パスを永続的に設定するわけではありません。
ReadEnvString を使用して現在のパスを読み取り、必要に応じてフォーマットしてから、WriteRegExpandStr で出力し直すことができます。http://nsis.sourceforge.net/Setting_Environment_Variablesを参照してください。これの欠点は、パスのすべてのフォーマットを自分で行う必要があり、 EnvVarUpdate 関数で既に行われている作業を複製する必要があることです-以下で説明します...
私が使用する方法は EnvVarUpdate 関数です。この関数のコードはここにあります。http://nsis.sourceforge.net/Environmental_Variables:_append,_prepend,_and_remove_entries
この関数をサンプルパスで使用すると、次のようになります。
${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\Program Files\Sample\bin" ; appends to the system path
${EnvVarUpdate} $0 "PATH" "A" "HKCU" "C:\Program Files\Sample\bin" ; appends to the user path
これにより、追加または先頭に追加することを選択でき、アンインストーラーで追加したものを削除できます。
デフォルトのコンパイル済みバイナリを含む NSIS の文字列の最大長は 1024 文字であることに注意してください。パスがそれよりも長い場合、上記のリンクに記載されているパッチを適用しないと、パスが破損する可能性があります。推奨される解決策は、文字列の長さが 8192 文字に設定されている makensis のバイナリをダウンロードするか、ソースを自分でコンパイルしてより長い文字列の長さを設定することです。詳細については、こちらを参照してください。http://nsis.sourceforge.net/Special_Builds
を使用set
して環境変数を追加/変更するか、setx
永続的に設定することができます (コンピューターのプロパティを介して追加したかのように)。
ただし、2 番目の解決策では .nsh ファイルを含める必要があり、変数を完全にリセットする方法が明確ではありません。むしろ、セミコロンで区切られたエントリのリスト (PATH 変数など) を削除、追加、または先頭に追加する機能があります。