在受限(Citrix)环境中从Java调用.bat文件
我不太熟悉Windows桌面的编程,我正试图找出如何处理从Java调用.bat文件。我试图让使用Maven的桌面Java程序作为jar文件运行,在Citrix虚拟化环境中执行bash脚本 最初的问题是UNC路径导致批处理文件找不到,但我修改了路径,现在我可以找到批处理文件,但我使用的Citrix帐户中禁用了cmd.exe,我担心我无能为力 下面是它的工作原理: (一) 用户通过program.jar文件启动程序用户检查更新 (二) 如果找到了更新,将创建一个名为在受限(Citrix)环境中从Java调用.bat文件,java,windows,maven,batch-file,cmd,Java,Windows,Maven,Batch File,Cmd,我不太熟悉Windows桌面的编程,我正试图找出如何处理从Java调用.bat文件。我试图让使用Maven的桌面Java程序作为jar文件运行,在Citrix虚拟化环境中执行bash脚本 最初的问题是UNC路径导致批处理文件找不到,但我修改了路径,现在我可以找到批处理文件,但我使用的Citrix帐户中禁用了cmd.exe,我担心我无能为力 下面是它的工作原理: (一) 用户通过program.jar文件启动程序用户检查更新 (二) 如果找到了更新,将创建一个名为program\u update.
program\u update.jar
的新jar文件
下载并将名为run\u update.bat的批处理文件复制到
主程序目录
(三)
在java程序中,调用以下命令:
Runtime.getRuntime().exec(“cmd/c pushd”+FileName.installation+”&&start run_update.bat&&popd”)代码>
其中FileName.installation
是以前设置的一个属性,用于指示主安装目录
run\u update.bat
运行一个循环,试图用program\u update.jar
替换program.jar
,并在命令提示符中显示成功/失败消息
当我在Citrix环境中运行此程序时,会收到以下消息:
“run\u update.bat”不被识别为内部或外部命令、可操作程序或批处理文件。
管理员已禁用命令提示符。
此时,我可以单击run\u update.bat
并成功运行该操作
名为via program.jar的自动更新可以在正常的windows环境中运行,并可以访问cmd
我的问题
- 当cmd.exe被禁用时,我从java发出的运行
cmd/c
的调用是否根本不起作用
- 将run_update.bat重命名为run_update.cmd有什么好处吗
- 有其他的技术吗?批处理文件是必需的,因为jar文件正在通过
mv
命令替换自身
我用另一种技术解决了自己的问题。结果是运行
Runtime.getRuntime().exec(“cmd/cpushd”+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");
}
我用另一种技术解决了自己的问题。结果是运行Runtime.getRuntime().exec(“cmd/cpushd”+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");
}