[英]How to get self process id in Flex Desktop App
我通過Flex builder 4創建了一個Flex桌面應用程序
我想將一些調試信息記錄到一個文件中,該文件由進程ID命名
//var pid:int = NativeApplication.nativeApplication.getPid() ??
var logFile:String = "/var/log/MyApp_"+pid+".log";
這些API是否可以在Flex / ActionScript3中獲取pid?
您可以從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").@id); // 7192
}// end function
}// end class
}// end package
C#控制台應用程序“GetProcesses.cs”使用GetProcesses()
方法創建一個xml進程,flex應用程序檢索該xml。 在這個例子中我使用
trace(_processes.process.(@name == "GetProcesses").@id); // 7192
獲取C#控制台應用程序的進程ID,但顯然您可以將xml查詢中的進程名稱更改為Flex應用程序正在使用的進程名稱。
我認為您無法找到當前正在運行的應用程序的pid。 您可以獲得有關您的應用程序的一些信息的唯一地方是NativeApplication 。
如果你真的需要pid,你可以創建一個像啟動器一樣的第二個應用程序。 這個新應用程序啟動並為您已使用NativeProcess創建的實際應用程序創建一個新進程。 通過這種方式,您可以獲得有關該過程的所有信息。
請記住,如果使用NativeProcess啟動,則會有一些限制(例如,您無法使用Web安裝)
希望這可以幫助
我認為這不包括在內,因為每個操作系統都有不同的獲取進程ID的方法。 您可以嘗試對GetCurrentProcessId執行NativeProcess調用,但我不確定它是否可行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.