锁定文件不适用于 windows .bat 文件

lock file won't work with windows .bat file

我正在创建一个锁定文件以防止我的程序出现多个实例,如此处所示 How to implement a single instance Java application?

如果我 运行 我的程序从命令行运行正常,那就是它启动我的程序并创建锁定文件。当我再次尝试 运行 我的程序时,它会识别锁定文件并且不会启动另一个实例,它会将命令行参数传递给当前 运行ning 进程。这就是我想要的。

如果我使用 .bat 文件,我第二次 运行 .bat 文件时收到此消息 "The process cannot access the file because it is being used by another process." 该消息不是来自我的程序。该程序没有按预期 运行。我觉得奇怪的是,它到达了我的程序尝试访问该文件的地步,但我的打印语句的 none 出现在我的日志文件中。我有我的程序的日志文件,我从 .bat 文件中捕获标准输出。

在这里

echo "START" >> C:\Users\Joe\Documents\NetBeansProjects\MyProgram\logs\myp.log
java -jar C:\Users\Joe\Documents\NetBeansProjects\MyProgram\target\MyProgram.jar %1  >> C:\Users\Joe\Documents\NetBeansProjects\MyProgram\logs\myp.log 2>&1

echo "FINISH"  >> C:\Users\Joe\Documents\NetBeansProjects\MyProgram\logs\myp.log

Windows 正在生成消息。

你为什么不用

if not exist "lockfile" myapplication

在你的批次中?

看来这个问题与我正在使用的锁定文件无关,而与我在批处理文件中写入的日志文件有关。
不确定如何解决该问题,但如果我从我的批处理文件中删除日志文件的写入,一切正常。