2011-07-31 3 views
0

플렉스 빌더에 의해 플렉스 데스크톱 응용 프로그램을 만듭니다. 4Flex Desktop App에서 자체 프로세스 ID를 얻는 방법

프로세스 ID로 명명 된 파일에 디버그 정보를 기록하고 싶습니다.

//var pid:int = NativeApplication.nativeApplication.getPid() ?? 
var logFile:String = "/var/log/MyApp_"+pid+".log"; 

Flex/ActionScript3에서 pid를 얻기위한 API는 있습니까?

답변

2

C# 콘솔 응용 프로그램에서 프로세스를 가져와 Flex 응용 프로그램에서 사용중인 프로세스를 선택할 수 있습니다.

GetProcesses.cs :

using System; 
using System.Diagnostics; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace GetProcesses 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Process[] processes = System.Diagnostics.Process.GetProcesses(); 

      String processesXml = ""; 

      processesXml += "<processes>\n"; 

      foreach (Process process in processes) 
      { 
       processesXml += "\t<process id='" + process.Id + "' name='" + process.ProcessName + "' />\n"; 

      }// end foreach 

      processesXml += "</processes>"; 

      Console.WriteLine(processesXml); 

     }// end method 

    }// end class 

}// end namespace 

Main.as :

package 
{ 
    import flash.desktop.NativeProcess; 
    import flash.desktop.NativeProcessStartupInfo; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.ProgressEvent; 
    import flash.filesystem.File; 
    import flash.utils.ByteArray; 

    public class Main extends Sprite 
    { 
     private var _nativeProcess:NativeProcess; 
     private var _nativeProcessSUI:NativeProcessStartupInfo; 
     private var _processes:XML; 

     public function Main():void 
     { 
      _nativeProcess = new NativeProcess(); 
      _nativeProcessSUI = new NativeProcessStartupInfo(); 

      _nativeProcessSUI.executable = File.applicationDirectory.resolvePath("GetProcesses.exe"); 
      _nativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onNativeProcessSOD); 
      _nativeProcess.addEventListener(Event.STANDARD_OUTPUT_CLOSE, onNativeProcessSOC); 
      _nativeProcess.start(_nativeProcessSUI); 

     }// end function 

     private function onNativeProcessSOD(e:ProgressEvent):void 
     { 
      _processes = XML(_nativeProcess.standardOutput.readUTFBytes(_nativeProcess.standardOutput.bytesAvailable)); 

     }// end function 

     private function onNativeProcessSOC(e:Event):void 
     { 
      trace(_processes.process.(@name == "GetProcesses")[email protected]); // 7192 

     }// end function 

    }// end class 

}// end package 

는 C# 콘솔 어플리케이션 "GetProcesses.cs의"GetProcesses()를 사용하는 공정의 XML이 생성 I이 예를 만든 메서드를 호출하고 flex 응용 프로그램에서 해당 XML을 검색합니다. Flex 어플리케이션이 사용하는 이름이 예에서 나는 C# 콘솔 응용 프로그램의 프로세스 ID를 얻을 수

trace(_processes.process.(@name == "GetProcesses")[email protected]); // 7192 

를 사용하지만 분명히 그 과정에 XML 쿼리에 프로세스 이름을 변경합니다.

+0

이것은 Air 응용 프로그램에서만 작동합니다. –

+0

고맙습니다. 나는 그것을위한 파이썬 응용 프로그램을 쓴다. –

0

현재 실행중인 응용 프로그램의 PID를 찾을 수 있다고 생각하지 않습니다. 앱에 대한 정보를 얻을 수있는 유일한 곳은 NativeApplication입니다.

정말로 pid가 필요한 경우 실행기처럼 작동하는 두 번째 응용 프로그램을 만들 수 있습니다. 이 새로운 응용 프로그램은 시작하여 NativeProcess을 사용하여 이미 만든 실제 응용 프로그램에 대한 새 프로세스를 만듭니다. 이 방법으로 프로세스에 대한 모든 정보를 얻을 수 있습니다.

당신이 시작 NativeProcess를 사용하는 경우 (예를 들어 당신이 웹 설치 사용할 수 없습니다)

는 희망이 각 OS가 있기 때문에 포함되어

0

나는이 생각하지 않는 데 도움이 일부 제한이 있음을 기억하라 프로세스 ID를 얻는 다른 방법. GetCurrentProcessId에 NativeProcess 호출을 시도 할 수는 있지만 제대로 작동하는지 확신 할 수 없습니다.

+0

Flex 응용 프로그램이 아닌 기본 프로세스 ID를 가져올 것이므로 ... – alxx

+0

Air 응용 프로그램에서만 작동합니다 (NativeProcess는 Flex에서만 수행 할 수 있기 때문에) –

+0

즉, 작동하지 않습니다. 새로 시작한 프로세스에는 AIR 응용 프로그램의 PID가 아닌 자체 PID가 있기 때문입니다. 그리고 Flex 어플리케이션의 PID는 전혀 이해가되지 않을 수도 있습니다. PID는 자신의 브라우저 프로세스가 아니라 브라우저 프로세스에서 실행될 수 있습니다. – alxx

관련 문제