如果我在Windows中运行%PATH%中存在的程序,当前文件夹中存在同名程序时,它将选择当前文件夹中的程序。有没有办法防止这种情况(忽略当前文件夹)?
我的问题的原因是我有一个Java程序,我已经放在注册表中的Run-key中,如下所示:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
MyProgram = javaw -cp MyProgram.jar com.mycompany.MyProgram
问题是我在其上测试的一台计算机上没有用。它抱怨错误的JRE版本(1.7而不是1.8)。我发现在这台计算机上有人安装了1.7以上的JRE 1.8,但1.7文件仍留在Windows \ System32中。
如果我在命令提示符下手动启动javaw -cp MyProgram.jar com.mycompany.MyProgram,它将起作用,除非我将Windows \ System32作为当前文件夹。
问题是,当Windows在启动期间启动程序时(从注册表中的Run-key),它将System32作为当前文件夹,因此它将使用错误的JRE版本。
我可以通过从System32中删除不正确的exe文件来修复此特定计算机上的这个问题,但是当其他人在其他地方安装它时我希望它能够正常工作,我想到的最好的方法是强制Windows到使用%PATH%,但我不知道如何。
答案 0 :(得分:3)
@echo off
set "to_run=javaw.exe"
for %%# in ("%to_run%") do set "ppath=%%~$PATH:#"
echo %ppath%
"%ppath%" -cp MyProgram.jar com.mycompany.MyProgram
有关%~$PATH:
语法检查for /?
答案 1 :(得分:1)
你可以通过在另一个不太可能存在java的目录中启动来避免这种情况:
cmd /c (cd\ && start /b javaw -cp MyProgram.jar com.mycompany.MyProgram)
start /b
可以避免cmd窗口停留在
答案 2 :(得分:0)
如果我在Windows中运行%PATH%中存在的程序,当前文件夹中存在同名程序时,它将选择当前文件夹中的程序。有没有办法防止这种情况(忽略当前文件夹)?
没有。这是大多数操作系统工作的机制:由于您明确地从某个文件夹启动程序,因此您的程序将该文件夹作为工作目录运行。
问题是我在其上测试的一台计算机上没有工作。它抱怨错误的JRE版本(1.7而不是1.8)。我发现在这台计算机上有人安装了1.7以上的JRE 1.8,但1.7文件仍留在Windows \ System32中。
那么你的解决方案肯定不应该改变工作目录,而是明确地通过设置正确的路径来调用正确的路径来强制执行最小的Java版本。
只需使用正确调用Java的cmd批处理文件。