如果从提示符或从JVM内部运行,Windows“dir”命令会有不同的结果

时间:2017-07-14 09:28:06

标签: java windows prompt

我必须保留一个小软件,以避免盗版或类似的黑客,使用这个技巧:因为它可以免费使用30天,它会在第一次运行时在特殊文件夹中创建一个加密文件,然后在每次启动时它将该文件的创建日期与今天的日期进行比较,以查看评估是否已过期。

也就是说,该软件是为Java 1.6开发的,它没有任何东西可以从文件中获取信息,所以不使用任何第三方库我的同事们决定使用这个代码

Process process = runtime.exec("cmd.exe /c dir /Tc path/filename");

获取“dir”命令的输出(包含文件的创建日期)作为String,然后执行比较。

最近我注意到这似乎不再起作用,当我探索这部分代码时,我发现了一个我无法理解的发现(在我的开发PC上)。 简单地说,我添加了上面流程输出的打印输出,它看起来像这样(它是意大利语,但我认为你可以理解文件被找到了):

line:  Il volume nell'unità C è Windows
line:  Numero di serie del volume: 4480-D4E2
line:
line:  Directory di C:\path
line:
line: 19/05/2017  12:23               886 filename

同时,直接从Windows提示符运行的同一命令返回没有该名称的文件。

由于这个文件在我的电脑上被反复删除和重新创建,我在其他计算机上尝试了这个,结果是一样的。从Java运行的命令总是找到这个“ghost”文件,即使该文件已从磁盘中删除。我注意到这个文件的创建日期始终是我第一次启动软件并创建文件的日期。

所以,问题是,为什么同样的命令从java代码运行并从Windows提示符运行得到不同的结果?我错过了什么吗?

我应该补充一点,我们的软件不使用经常安装在Windows上的jre,但是它随jre 1.7.0_65一起作为安装文件夹的子文件夹附带,并用它来运行。

编辑:创建文件的特殊文件夹是Windows的System32文件夹。

0 个答案:

没有答案