同时启动多个实例时,VisionProxy.dll上的Sikuli脚本IO错误

时间:2013-08-29 10:09:27

标签: windows dll sikuli

我在Windows上遇到以下问题。我在交互模式下使用SikuliScript,工作正常。这是我用来启动它的命令行:

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

但是,如果我至少两次大致同时启动此命令(手动或通过计划任务),我将得到一个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)

当库被加载时,DLL会被Sikuli自己放到那里,所以我不知道如何防止它。有没有人有类似的问题并解决了它?

谢谢&amp;此致

1 个答案:

答案 0 :(得分:0)

对此没有快速简便的解决方法。

正在发生的事情是sikuli-script jar正在使用一个小技巧来允许它被打包为一个独立的jar。 jar文件包含它可能需要的所有本机库,当你运行它时,代码会找出你真正需要的那个(也许是Windows_x86),将它从jar中拉出来到temp目录中,然后动态链接它。在你做的时候连续运行两次会使DLL提取过程失败,因为一个进程会攻击其他文件。

唯一的解决方法是更改​​代码。您需要获取Sikuli的源代码,找到它执行动态链接技巧的位置,然后删除它。然后你需要自己构建它并手动链接DLL。这将允许您一次运行多个实例(虽然我不确定它会有多大用处。)