1

Windowsで次の問題があります。正常に動作しているインタラクティブ モードで SikuliScript を使用しています。それは私がそれを起動するために使用するコマンドラインです:

"C:\Program Files (x86)\Java\jre6\bin\java.exe" -jar "E:\APPS\Sikuli\Runtime\sikuli-script.jar" -i

ただし、このコマンドをほぼ同時に (手動またはスケジュールされたタスクを介して) 少なくとも 2 回起動すると、Java 例外が発生します。これは、VisionProxy.dll が一時ディレクトリに既に存在し、アクティブに使用されているため上書きできないためです (もちろん他のコマンド):

java.io.FileNotFoundException: C:\Users\%USERNAME%\AppData\Local\Temp\2\tmplib\VisionProxy.dll (The process cannot access the file because it is being used by another process)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)

ライブラリが読み込まれると、Sikuli 自体によって DLL が配置されるため、これを防ぐ方法がわかりません。誰かが同様の問題を抱えていて、それを解決しましたか?

ありがとうございます。それでは、お元気で

4

1 に答える 1

0

これをすばやく簡単に修正する方法はありません。

何が起きているかというと、sikuli-script jar がちょっとしたトリックを使って、単一の自己完結型 jar としてパッケージできるようになっているということです。jar ファイルには必要なネイティブ ライブラリがすべて含まれており、実行すると、実際に必要なライブラリ (Windows_x86 など) がコードによって判断され、jar から一時ディレクトリに取り出され、動的にリンクされます。 . 2 つ続けて実行すると、DLL 抽出プロセスが失敗します。これは、1 つのプロセスが他のファイルを踏みにじるためです。

これに対する唯一の修正は、コードを変更することです。Sikuli のソース コードを取得し、ダイナミック リンク トリックを実行している場所を見つけて、それを削除する必要があります。次に、自分でビルドし、DLL に対して手動でリンクする必要があります。これにより、一度に複数のインスタンスを実行できます (ただし、それがどれほど役立つかはわかりません)。

于 2013-09-01T03:12:29.513 に答える