2012-02-15 17 views
1

私はEnv変数を作成し、それをNSISインストーラスクリプトのPATH変数にWin7 - 64ビットで追加します。NSIS:作成された環境変数が機能しません

Push "MyPath" 
Push "D:\MyFolder\bin;D:\MyFolder\lib" 
Call WriteEnvStr 

Push "%MyPath%" 
Call AddToPath 

インストールした後、私は、実行時に検出されないから、CMDプロンプト

MyPath=D:\MyFolder\bin;D:\MyFolder\lib 
Path=%MyPath%;<my existsing path> 

しかし、任意のexeファイル/ DLL内の変数の両方を見ることができます。 管理者としてcmdプロンプトを実行してからexeを実行すると正常に動作します。 これは、exeを管理者として直接実行する場合にも機能します。

また、環境エディタを開いてMyPath変数をダブルクリックし、何も変更せずに[OK]をクリックすると、管理者として実行しなくてもexeファイルが正常に実行されます。 そして、私はCMDプロンプトでパスをチェックすると、今、MYPATH変数は、私はENV変数を作成した後、「コールEnvVarUpdate」を追加しようとしましたが、それは動作しません

MyPath=D:\MyFolder\bin;D:\MyFolder\lib 
Path=D:\MyFolder\bin;D:\MyFolder\lib;<my existsing path> 

置換されています。

私はNSIS Unicodeバージョン2.46.3

+1

私はそれがNSISの問題ではないことを示唆しているSuperUserで答えを見ましたが、envに問題があるWindows。別のenv内の変数。変数。それがどんなに真実であるかわからない。 – vinaym

答えて

-2
${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\Program Files\Java\jre6\bin" 

StrCpy $R0 "$0" 

System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PATH", R0).r2' 

ReadEnvStr $R0 "PATH" 

ExecWait "$INSTDIR\tmp\batchfile.bat 
0

それはレジストリを使用してはるかに大きいだろう切り捨てることにより、パス内のデータを失うことなく、パスを変更/追加することのあなたのチャンスを使用しています。

ReadRegStr $0 HKCU "Environment" Path 
StrCpy $1 "D:\MyFolder\bin;D:\MyFolder\lib" 
StrCpy $2 "$0;$1" 
WriteRegStr HKCU "Environment" Path "$2" 

お使いのシステムは、AUTOEXEC.BATファイルを持っている場合、AUTOEXEC.BATに設定どのPATHも%PATH%環境変数に追加されます。これは、PATHを設定する必要のある古いインストールルーチンとの互換性を提供するためです。しかし、AUTOEXEC.BATの他のコマンドはすべて無視されます。とにかくこれは多かれ少なかれ時代遅れです。

しかし、私たちはあなたの方法を続けることができますが、目標を達成するための別の手段を試すことができます。ここで、次のようなパスに新しい変数を含める

StrCpy $R0 "MYPATH" 
StrCpy $R1 "D:\MyFolder\bin;D:\MyFolder\lib" 
System::Call `Kernel32::SetEnvironmentVariable(t"$R0",t"$R1")` 

ReadEnvStr $R0 COMSPEC 
ReadEnvStr $R1 MYPATH 
ExecDos::Exec /TOSTACK `"$R0" /c "SetX PATH=%PATH%;$R1 -m"` 

あなたは簡単に、1つの変数%MYPATHを変更することができ、これに似た何かを私はこれをテストしていませんが、あなたは試すことができます%は将来の任意の時点で、PATHは新しい値を反映します。

関連する問題