Как получить идентификатор собственного процесса в Flex Desktop App - PullRequest
0 голосов
/ 31 июля 2011

Я создаю приложение Flex Desktop от Flex Builder 4

Я хочу записать некоторую отладочную информацию в файл, названный именем процесса

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

Это любой API для получения pidв Flex / ActionScript3?

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

Вы можете получить процессы из консольного приложения 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» создает XML-процессы с использованием метода GetProcesses(), а гибкое приложение получает этот XML-файл. В этом примере я использую

trace(_processes.process.(@name == "GetProcesses").@id); // 7192

для получения идентификатора процесса консольного приложения C #, но очевидно, что вы измените имя процесса в запросе xml на имя процесса, которое использует ваше flex-приложение.

0 голосов
/ 01 августа 2011

Я не думаю, что это включено, потому что у каждой ОС есть свой способ получения идентификатора процесса.Вы можете попытаться сделать вызов NativeProcess для GetCurrentProcessId , но я не уверен, будет ли он работать.

0 голосов
/ 31 июля 2011

Не думаю, что вы можете найти pid вашего запущенного приложения.Единственное место, где вы можете получить некоторую информацию о вашем приложении, это NativeApplication .

Если вам действительно нужен pid, вы можете создать второе приложение, которое будет работать как лаунчер.Это новое приложение запускается и создает новый процесс для реального приложения, которое вы уже создали, используя NativeProcess .Таким образом, вы получите всю информацию о процессе.

Помните, что если вы используете запуск NativeProcess, у вас есть некоторые ограничения (например, вы не можете использовать веб-установку)

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...