簡體   English   中英

如何在Flex Desktop App中獲取自我進程ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM