2013-08-29 43 views
1

我在Windows上遇到以下問題。我在交互模式下使用SikuliScript工作正常。這是我用它來啓動它的命令行:同時啓動多個實例時VisionProxy.dll上的Sikuli腳本IO錯誤

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

但是如果我大致在同一時間(手動或通過計劃任務),啓動此命令至少兩次,我會得到一個Java異常,因爲VisionProxy.dll已經存在於我的Temp目錄,並且不能被覆蓋,因爲它是有效使用中(按課程的其它命令):

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) 

的DLL得到由Sikuli本身當庫被加載放在那裏,所以我不知道如何爲了防止這一點。有沒有人有類似的問題,並解決了它?

感謝&問候

回答

0

有沒有快速和簡單的辦法解決這個。

發生什麼事是sikuli腳本jar使用一個小技巧來允許它被打包成一個獨立的jar。 jar文件包含它可能需要的所有本地庫,並且當您運行它時,代碼會根據您實際需要的(Windows_x86,可能)將它從jar中拖出到temp目錄中,然後動態鏈接它。因爲一個進程踩在其他人的文件上,導致DLL提取進程失敗,因此您連續運行兩個進程。

唯一的解決方法是更改​​代碼。您需要獲取Sikuli的源代碼,找到它執行動態鏈接技巧的位置,然後刪除它。然後你需要自己構建它並手動鏈接到DLL。這將允許你一次運行多個實例(雖然我不確定這將是多麼有用)。