2016-04-04 11 views
-1

問題を公開しますが、まずすべての詳細を提供するために設定を表示する必要があります。アクションスクリプトNativeProcess、resolvePathおよびswfが機能しません

2つの仮想マシンと2つのウィンドウがあります。最初の1つは、開発環境(IDE)があり、2番目に特別なものは何もインストールされていないすべてのアクションスクリプトを開発する場所です。両方とも、Adobe AIRとAdobe Flash Playerがあります。

これは私の問題です。私はNativeProcessを使用してコマンドラインでdllをロードするCMD.exeを実行するスクリプトを(最初のもので)開発します。 そして私がビルドするとき&プロジェクトを実行するとすべてが正常です。チェックして、dllが読み込まれます。しかし、問題は、2番目のWindowsがローカルホストのWebサイトに接続して(サーバーとして再生する最初のウィンドウに)、my.dllをロードしないファイル "myProgram.swf"(ActionScriptプログラム)を実行するときです。

今、私はあなたにすべての私のコードを印刷:

これは、DLL「myProgram.swf」をロードするスクリプトです:

public class NativeProcessExample extends Sprite 
{ 
    public var process:NativeProcess; 

    public function NativeProcessExample() 
    { 
     if(NativeProcess.isSupported) 
     { 
      setupAndLaunch(); 
     } 
     else 
     { 
      trace("NativeProcess not supported."); 
     } 
    } 

    public function setupAndLaunch():void 
    {  

     var fmt:TextFormat = new TextFormat(); 
     var txt:TextField = new TextField(); 

     fmt.size = 32; 
     txt.text = 'Hello, world!' + '\n' + 
      'Width = ' + stage.fullScreenWidth + '\n' + 
      'Height = ' + stage.fullScreenHeight; 
     txt.setTextFormat(fmt); 
     txt.autoSize = TextFieldAutoSize.LEFT; 

     addChild(txt); 


     var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
     var file:File = File.applicationDirectory.resolvePath("C:\\Windows\\System32\\regsvr32.exe"); 
     nativeProcessStartupInfo.executable = file; 


     var args:Vector.<String> = new Vector.<String>(); 
     args.push("C:\\Users\\myUser\\Downloads\\myDLL.dll"); 
     nativeProcessStartupInfo.arguments = args; 
     var process:NativeProcess = new NativeProcess(); 
     process.start(nativeProcessStartupInfo); 
     process.addEventListener(NativeProcessExitEvent.EXIT, exitHandler); 

私はカット(私はすべての部分が含まれており、最後に削除)スクリプトその原因が長すぎますが、ここで最も興味深い部分です。

ここでは、2番目のWindowsが接続してdllを回復するための "index.php"を表示します。 :

<!DOCTYPE html> 
<html> 
<head> 
    <title>Test</title> 
      <style type=\"text/css\"> 
        body, html 
        { 
          width:100%; 
          height:100%; 
          overflow:hidden; 
        } 
        #SWFSquare 
        { 
          height: 200px; 
          width: 200px; 
          background-color: blue; 
        } 
      </style> 
      <script type="text/javascript" src="swfobject.js"></script> 

      <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script> 
      <script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script> 

</head> 
<body bgcolor="#ffdfaf"> 



    <div id="SWFSquare"> 
    </div> 

    <input type="button" value="Download" id="buttonDownload" style="margin-left: auto; margin-right: auto; display: block;"> 

    <script type="text/javascript"> 

      $(function() { 

      $("#buttonDownload").click(function() { 
        window.open("myDLL.dll"); 
        myFunction(); 
      }); 

      function myFunction() { 


        setTimeout(function(){ 

          var element = document.getElementById("SWFSquare"); 
          swfobject.embedSWF("myProgram.swf", element, 300, 120, 10); 

        },10000); 
      } 
    }); 

    </script> 
</body> 
</html> 

だから私はあなたがすべての必要な情報を持っている願っています。詳細は私に尋ねてください。

思い出してください。私の開発環境(IDE)の下で1番目のWindowsでスクリプトを起動すると、すべてのDLLがロードされますが、index.phpに接続して2番目のWindowsでロードしようとすると、SWFが動作しますページに "HelloWorld"というメッセージが表示されますが、DLLがロードされていません...

私を助けてくれますか? 。あなたのよう

:私は:-(2週間のためにこれに取り組むすべての

+0

質問は本当に不明です(私にとっては少なくとも)。あなたは何をしようとしているのですか ?そのAS3コードは、あなたのAIRアプリケーション(サーバー)または 'index.php'によってロードされたSWF用です。次に、AIRアプリケーションとSWFの関係は何ですか?もちろん、あなたはNativeProcessがAIRのためだけに利用可能であることを知っておくべきです...あなたの目標とあなたの問題をより詳しく説明できますか? – akmozo

+0

OSのファイル(exeまたはdllなど)を読み込むためにブラウザにSWFが実行されることはありません。これはセキュリティの問題です。 IDEでは、AIRアプリケーション(インストールされているアプリケーションのように動作している)をテストしています。 –

+0

まず、すばやい回答をいただきありがとうございました:-) – 0wn3d

答えて

0

まずそう

:-)迅速な対応のために皆さんに感謝し、私は「Akmozoの質問をにお答えします私のActionScriptの説明では、 "NativeProcess"を使用してcmdを実行し、myDLL.dllをロードするコマンドを実行します。

これを開始するには、swfを実行するだけです。私はFlashDevelop環境とすべてのスクリプト "myProgram.as"で作業しています "Build &実行 "" myProgram.swf "ファイルを作成します。私はちょうどこのコードによって、より正確には、私の「index.phpを」することで、Webを介して実行してしなければならない(自動的に作成)このファイルを入手したら:だから

var element = document.getElementById("SWFSquare"); 
swfobject.embedSWF("myProgram.swf", element, 300, 120, 10); 

、第二の窓があるindex.phpに接続されていますmyProgram.swfを実行し、最後にロードされたDLLがありません...

これは私の問題です。私はあなたに "Akzmozo"に答えましたか?

あなたの答えは"VC.one"私は特に準備した環境でそれを行うことができるはずだと思います。私はITだ

  • 第一Windowsの最後の更新やパッチで
  • 更新なしと第二のWindowsなし最後のFlash Player(現在は19.0.0.206です)

を:言うことです 私は今、Adobe Flash Player 19の違反に取り組んでいます。通常、この作業にCVEが既に存在するため、これを実行することができます。このシナリオは再作成します。しかし

+0

私たちの質問に答えるために答えの領域を使用する必要はありません、あなたはコメントを使用することができますそれをする。 – akmozo

+0

私はあなたの問題、または少なくとも状況を理解していると思います。 Flash Playerで 'NativeProcess'を使用することはできないことを知っておく必要があります。そのため、SWFはブラウザでどのように動作するはずですか?あなたのAIRアプリケーションをテストしているので、あなたのコードは "最初の"ウィンドウで動いていますが、 "2番目の"テキストでは、 "Hello、world"というテキストだけが表示されます。このエラーは、Flash Playerのデバッグバージョンを使用して確認できます。そのSWFファイルはAIR用にコンパイルされているため、Flash Playerでは100%実行できません。 – akmozo

+0

特定のCVEへのリンクはありますか?また、私の答えをチェックしてください、多分あなたが理解するのに役立ちます。 –

0

But I'm always stuck on this problem and I think I missed something but I don't know what it is...

@Akmozoが正しい...私はいつもこの問題にこだわっていると私は私が何かを逃したと思いますが、私はそれが何であるかを知りません。 Flash Player(ブラウザ)& AIR(OSアプリケーション)は、と異なるアプリケーションとしてAS3コードを実行する方法です。 これらは常に同じではありません(ブラウザのFlash PlayerプラグインでレンダリングされたAS3アプリケーションはセキュリティ上の理由からはるかに制限されていますが、コンピュータ上でプログラムを実行することはできません。インターネット経由)。

また、MacまたはLinuxブラウザからSWFを実行するとどうなるか考えてみてください。これらのOSはdllをどのようにロードするのですか(Windows専用のファイルなので)?これにより、プラットフォームに関係なく、ブラウザのコードはどこでも同じように動作するというルールが破られています。

ポイントを証明するには、以下のようにテキストフィールドコードを更新してください。 IDEテストでは(NP) Support = trueと表示されますが、ブラウザでは= falseが表示されます。もちろん、その偽の場合は、ブラウザからdllを読み込むことはできません。

var fmt:TextFormat = new TextFormat(); 
var txt:TextField = new TextField(); 

fmt.size = 32; 
txt.text = 'Hello, world!' + '\n' + 
'Width = ' + stage.fullScreenWidth + '\n' + 
'Height = ' + stage.fullScreenHeight + '\n' + 
'(NP) Support = ' + String(NativeProcess.isSupported); //# check if available 

txt.setTextFormat(fmt); 
txt.autoSize = TextFieldAutoSize.LEFT; 

addChild(txt);