Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在受限(Citrix)环境中从Java调用.bat文件_Java_Windows_Maven_Batch File_Cmd - Fatal编程技术网

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

在受限(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.

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

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

下面是它的工作原理:

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

(二) 如果找到了更新,将创建一个名为
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");
      }