2011-12-28 11 views
1

上記のとおりです。 私は、特にExecWaitを使用してjava.exeを呼び出し、クラス名を渡してJavaプログラムを実行しています。私が実行しているアプリケーションは相対パスに依存しており、特定のディレクトリから実行する必要がありますが、Javaを直接呼び出すと、単にインストーラの場所が現在のディレクトリとして使用され、失敗します。NSIS - 実行する前にプロセスの作業ディレクトリを設定してください

これを回避する方法はありますか?

更新:ここに私のコマンドラインです:

ExecWait "$INSTDIR\MyApp\jre\bin\java.exe -cp $INSTDIR\MyApp\lib\*; MyJavaClassName" 
+0

いくつかのコマンドラインを投稿できますか? – korifey

+0

いいえ、私はクラス名とともにアプリケーションのバンドルされたJREを呼び出すだけです。 – Rex

+1

あなたは安全のためだけ引用符を修正する必要があります:ExecWait '"$ instdir \ app.exe" "param 1" param2 "para m3"'(パスなどを引用する必要があります) – Anders

答えて

10

SetOutPathは、プロセスの現在/作業ディレクトリを設定し、それは子プロセスによって継承されなければならない...

Push $OUTDIR 
SetOutPath $myspecialdir 
ExecWait '"$instdir\myapp.exe"' 
Pop $OUTDIR 
SetOutPath $OUTDIR # Optional if working directory does not matter for the rest of the code 

または

は、
SetOutPath $myspecialdir 
ExecWait '"$instdir\myapp.exe"' 
SetOutPath $instdir 
+0

ありがとう、現在のディレクトリを設定する:) – Rex

関連する問題