1

我在 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)

加载库时,Sikuli 自己将 DLL 放在那里,所以我不知道如何防止这种情况。有没有人遇到过类似的问题并解决了?

感谢和问候

4

1 回答 1

0

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

发生的事情是 sikuli-script jar 正在使用一个小技巧来允许它被打包为一个独立的 jar。jar 文件包含它可能需要的所有本机库,当您运行它时,代码会确定您实际需要哪个(可能是 Windows_x86),将其从 jar 中拉出到 temp 目录中,然后动态链接它. 连续运行两个会导致 DLL 提取过程失败,因为一个进程会踩踏其他进程的文件。

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

于 2013-09-01T03:12:29.513 回答