在受限(Citrix)环境中从Java调用.bat文件

问题描述 投票:1回答:1

我不太熟悉Windows桌面的编程,我正在试图弄清楚如何处理从Java调用.bat文件。我正在尝试使用Maven运行桌面Java程序作为jar文件在Citrix虚拟化环境中执行bash脚本。

最初的初始问题是UNC路径导致批处理文件无法找到,但我已经修改了路径,现在我能够找到批处理文件,但是在Citrix帐户中我禁用了cmd.exe使用,我担心我无能为力。

以下是它的工作原理:

1)用户通过program.jar文件启动程序用户检查更新

2)如果找到更新,则下载名为program_update.jar的新jar文件,并将名为run_update.bat的批处理文件复制到主程序目录。

3)在java程序中,调用以下命令:

Runtime.getRuntime().exec("cmd /c pushd " + FileName.installation + " && start run_update.bat && popd");

其中FileName.installation是先前设置的属性,表示主安装目录。

run_update.bat运行循环尝试用program.jar替换program_update.jar并在命令提示符中显示成功/失败消息。


当我在Citrix环境中运行它时,我收到以下消息:

'run_update.bat' is not recognized as an internal or external command, operable program, or batch file.

The command prompt has been disabled by your administrator.

此时,我可以点击run_update.bat并成功运行该操作。

通过program.jar调用的自动更新在可访问cmd的普通Windows环境中工作。

我的问题

  • 当cmd.exe被禁用时,我的java调用运行cmd /c <commands>根本不能运行吗?
  • 将run_update.bat重命名为run_update.cmd会有什么好处吗?
  • 任何替代技术?批处理文件是必需的AFAIK,因为jar文件正在通过mv命令替换它自己。
java windows maven batch-file cmd
1个回答
0
投票

我用替代技术解决了自己的问题。事实证明,在Citrix环境中运行Runtime.getRuntime().exec("cmd /c pushd " + FileName.installation + " && start run_update.bat && popd");是一个问题,因为访问cmd是受限制的。我重写了它以使用Desktop类:

File exe = new File(FileName.installation + File.separator + "install_update.bat");

if (Desktop.isDesktopSupported()) {
    Desktop.getDesktop().open(exe);
} else {
    Runtime.getRuntime().exec("cmd /c pushd " + FileName.installation + " && start install_update.bat && popd");
}
© www.soinside.com 2019 - 2024. All rights reserved.