2017-08-21 5 views
1

私はWindowsデスクトップのプログラミングに慣れていないので、Javaから.batファイルを呼び出す方法を理解しようとしています。私はMavenを使ってデスクトップJavaプログラムをjarファイルとして実行しようとしていますが、Citrix仮想化環境でbashスクリプトを実行します。制限付き(Citrix)環境でJavaから.batファイルを呼び出す

最初の問題は、UNCパスがバッチファイルを見つけられなかったが、パスを変更してバッチファイルを見つけることができたが、cmd.exeが私が使用しているCitrixアカウントで、私は何もできないと心配しました。

しくみはこうだ:

1) ユーザーはアップデート

2用program.jarファイルユーザチェックを経てプログラムを起動) 更新が検出されると、新しいjarファイルがprogram_update.jarと呼ばれるが をダウンロードされ、 run_update.batというバッチファイルが メインプログラムディレクトリにコピーされます。 Javaプログラム内から

3) は、次のコマンドが呼び出されます。

FileName.installation

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

が自宅のインストールディレクトリを示す以前に設定されているプロパティです。

run_update.batprogram.jarprogram_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のが無効になっているとき、単純に仕事に行くのではないcmd /c <commands>を実行するためにJavaから私の呼び出しですか?
  • run_update.batをrun_update.cmdに名前を変更しても問題ありませんか?
  • 代替技術はありますか? jarファイルがmvコマンドで置き換えられるため、バッチファイルはAFAIKに必要です。

答えて

0

私は別の方法で自分の問題を解決しました。 cmdへのアクセスが制限されているため、Citrix環境でRuntime.getRuntime().exec("cmd /c pushd " + FileName.installation + " && start run_update.bat && popd");の実行が問題であったことが判明しました。私は、デスクトップクラスを使用するように書き直しました。

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"); 
} 
関連する問題