createprocessw失敗(acess_denied)
-
26-10-2019 - |
質問
現在、使用するアプリケーションを変換しています CreateProcessW()
それ以外の Runtime.exec()
私がそれが提供する情報が必要なので。ただし、CreateProcessW()への呼び出しは、エラーコード5(アクセス拒否)で失敗します。同じケースでruntime.exec()が正常に実行されるため、なぜこれが起こるのかを知ることができませんでした。
私のエラーは、次のコードスニペット、メソッドコール、JNAインターフェイスのいずれかにある可能性があります。
public ProcessInfo createProcess(String dir, String name){
ProcessInfo pi = new ProcessInfo();
StartupInfo start = new StartupInfo();
mem.CreateProcessW(new WString(name),
null,
null,
null,
false,
0,
null,
new WString(dir),
start.getPointer(),
pi.getPointer());
return pi;
}
createprocesswの私の定義
boolean CreateProcessW(WString apname,
char[] comline,
Pointer p,
Pointer p2,
boolean inheritHandles,
int createFlags,
String environment,
WString directory,
Pointer startinf,
Pointer processInfo);
追加情報:
- runtime.exec()は、指定された文字列で成功します
- startupinfoのサイズが設定されています
- 使用済みのtest環境:Winxp SP3およびNetBeans 6.9.1
使用されるパラメーターの例:
- 名前:moviemk.exe
- dir:c: program movie maker
また、さまざまなパスでテストされているため、空白の問題ではありません
ありがとう
アップデート:
結局のところ、エラーは、私がそれらをチェックした後に作業監督とexeパスの周りに電話を切り替えることによって引き起こされました。結果のアクセスが拒否されたため、私は実際にそれが少なくともexeを見つけたと思った。その問題を処理するために、IllegalargumentExceptionを追加します。
exeが作業監督に関連する追加のエラーがあったので、その答えを受け入れます。助けてくれてありがとう。
解決
CreateProcessWの最初のパラメーターは、現在のディレクトリに対するフルパスまたはパスのいずれかでなければなりません。ワーキングディレクトリパラメーターに関連するパスではありません。これは、期待していることのようです。
合格してみてください C:\Programme\Movie Maker\moviemk.exe
名前パラメーターとして
他のヒント
最初のパラメーター lpApplicationName
の CreateProcess 機能はとして使用されます NULL
通常、2番目のパラメーター lpCommandLine
開始するプログラム名から始まるコマンドラインを含める必要があります。
現在使用している最初と2番目のパラメーターを切り替えるためにfryするだけです CreateProcessW
電話。
あなたが入っているフルパスは何ですか? Runtime.exec
議論を内部的に引用している可能性があり、この状況にぶつかる可能性があります。
http://support.microsoft.com/kb/179147
たぶん、存在するパスの接頭辞があり、フォルダーや他のファイルを実行しようとするのですか?
パス全体に引用符を入れてみて、それが役立つかどうかを確認してください。