0

サーバー側でDOSコマンドを実行し、特定のユーザーにメールで送信するGoogle App Engineでプロジェクトを開発しています。これは、JAVA を使用して dos コマンドを実行するために使用しているサンプル コードです。

     package com.alex.coderjunction.server;

      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;

      public class BatRunner {
     public String BatResult() throws IOException {
        StringBuffer sbOut=new StringBuffer();
        String cmd = "cmd /c ipconfig/all";
         Runtime r = Runtime.getRuntime();
         Process pr = r.exec(cmd);
         BufferedReader stdInput = new BufferedReader(new 
         InputStreamReader( pr.getInputStream() )); 
         String s ;
         while ((s = stdInput.readLine()) != null) {
             sbOut.append(s+"\n"); 
           }
        return sbOut.toString(); 
    }
}

実行するたびに、次のようなエラーが発生します。

java.security.AccessControlException: access denied ("java.io.FilePermission" "<<ALL FILES>>" "execute")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:431)
    at java.lang.SecurityManager.checkExec(Unknown Source)
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at com.alex.coderjunction.server.BatRunner.BatResult(BatRunner.java:17)
    at com.alex.coderjunction.server.Mailer.sendMail(Mailer.java:37)
    ......
    ......... 

dos コマンドをリモートで実行しようとすると、ぎこちなく見えることはわかっています。それでも、アドバイス/解決策は高く評価されます。

4

3 に答える 3

2

SDK は、アプリが展開される環境 (つまり、appspot.com) をエミュレートしようとします。これにより、ローカルで開発したときに表示されるものが、展開後に表示されるものになるという合理的な確信が得られます。エミュレーションの一部には、プロセスの開始など、一部の機能を無効にすることが含まれます。デプロイされたアプリからプロセスを開始することはできないため、dev_appserver の下でプロセスを開始することはできません。

これが dev_appserver の下でのみ動作するものであると仮定した場合の回避策は、必要に応じて DOS コマンドを実行し、結果を応答として返す別のローカル サーバーをセットアップすることです。その後、ソケットまたは を使用して、ローカル アプリからそのサーバーに接続できますURLFetch

于 2013-11-08T15:29:00.830 に答える
1

GAE で DOS シェル コマンドをサーバー側で実行できるとは思えません。

プロセスを実行する基盤となるオペレーティング システムは何かを自問してみてください。よほどの間違いでない限り、おそらく DOS ではありません。

于 2013-11-08T08:14:16.297 に答える
1

Google App Engine ではシステム コマンドを実行できません。特に Windows/DOS シェル コマンド。
ここでサンドボックス環境の説明を読んでください: https://developers.google.com/appengine/docs/java/

于 2013-11-08T21:15:01.473 に答える