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

Posted

技术标签:

【中文标题】锁定文件不适用于 Windows .bat 文件【英文标题】:lock file won't work with windows .bat file 【发布时间】:2017-11-26 05:23:41 【问题描述】:

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

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

如果我使用 .bat 文件,我第二次运行 .bat 文件时会收到此消息“该进程无法访问该文件,因为它正被另一个进程使用。”该消息不是来自我的程序。该程序未按预期运行。我觉得奇怪的是它到达了我的程序尝试访问该文件的点,但我的打印语句都没有出现在我的日志文件中。我有我的程序的日志文件,我从 .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

【问题讨论】:

你能发布你的批处理文件吗? 【参考方案1】:

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

【讨论】:

【参考方案2】:

Windows 正在生成消息。

你为什么不使用

if not exist "lockfile" myapplication

在你的批次中?

【讨论】:

我需要传递现有的程序数据,我想也有办法解决这个问题,但我想了解发生了什么

以上是关于锁定文件不适用于 Windows .bat 文件的主要内容,如果未能解决你的问题,请参考以下文章

fopen() 不适用于 gvim 编辑器

.jar 文件不适用于 Windows 调度程序

cURL - 文件路径位置的文件上传不适用于 Windows 命令提示符

用于重命名和移动文件的 Python、bat 文件和任务计划程序 - 在 Windows 10 中无法正常工作

我使用 pyinstaller 创建的 .exe 文件适用于 Windows 10,但不适用于 Windows 7

为啥 Windows START 命令不适用于参数和路径中的空格?