flash.desktop

# NativeProcess - AS3

Package | flash.desktop
Class | public class NativeProcess
Inheritance | NativeProcess EventDispatcher Object

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

The NativeProcess class provides command line integration and general launching capabilities. The NativeProcess class lets an AIR application execute native processes on the host operating system. The AIR applcation can monitor the standard input (stdin) and standard output (stdout) stream of the process as well as the process's standard error (stderr) stream.

The NativeProcess class and its capabilities are only available to AIR applications installed with a native installer (extended desktop profile applications). When debugging, you can pass the `-profile extendedDesktop` argument to ADL to enable the NativeProcess functionality. At runtime, you can check the `NativeProcess.isSupported` property to to determine whether native process communication is supported.

AIR profile support: This feature is supported on applications that are deployed to desktop operating systems via native installers. The feature is not supported on mobile devices or on AIR for TV devices. You can test for support at run time using the `NativeProcess.isSupported` property. See AIR Profile Support for more information regarding API support across multiple profiles.

AIR applications installed with a native installer (extended desktop profile applications) can also use the `File.openWithDefaultApplication` to open an application. However, the NativeProcess class provides direct access to the standard input, standard output, and standard error pipes.

Note: AIR for TV applications using the `extendedTV` profile can use native extensions to execute native processes. Similarly, mobile devices can use native extensions.

View the examples

More examples

Communicating with native processes in AIR
Native extensions versus the NativeProcess ActionScript class

Related API Elements

flash.external.ExtensionContext

Public Properties
Hide Inherited Public Properties
Show Inherited Public Properties

| Property | Defined By
--- | --- | ---
|  | constructor : Object A reference to the class object or constructor function for a given object instance. | Object
|  | isSupported : Boolean [static] [read-only] Indicates if running native processes is supported in the current profile. | NativeProcess
|  | running : Boolean [read-only] Indicates if this native process is currently running. | NativeProcess
|  | standardError : IDataInput [read-only] Provides access to the standard error output from this native process. | NativeProcess
|  | standardInput : IDataOutput [read-only] Provides access to the standard input of this native process. | NativeProcess
|  | standardOutput : IDataInput [read-only] Provides access to the standard output pipe of this native process. | NativeProcess

Public Methods
Hide Inherited Public Methods
Show Inherited Public Methods

| Method | Defined By
--- | --- | ---
|  | NativeProcess() Constructs an uninitialized NativeProcess object. | NativeProcess
|  | addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void Registers an event listener object with an EventDispatcher object so that the listener receives notification of an event. | EventDispatcher
|  | closeInput():void Closes the input stream on this process. | NativeProcess
|  | dispatchEvent(event:Event):Boolean Dispatches an event into the event flow. | EventDispatcher
|  | exit(force:Boolean = false):void Attempts to exit the native process. | NativeProcess
|  | hasEventListener(type:String):Boolean Checks whether the EventDispatcher object has any listeners registered for a specific type of event. | EventDispatcher
|  | hasOwnProperty(name:String):Boolean Indicates whether an object has a specified property defined. | Object
|  | isPrototypeOf(theClass:Object):Boolean Indicates whether an instance of the Object class is in the prototype chain of the object specified as the parameter. | Object
|  | propertyIsEnumerable(name:String):Boolean Indicates whether the specified property exists and is enumerable. | Object
|  | removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void Removes a listener from the EventDispatcher object. | EventDispatcher
|  | setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void Sets the availability of a dynamic property for loop operations. | Object
|  | start(info:NativeProcessStartupInfo):void Starts the native process identified by the start up info specified. | NativeProcess
|  | toLocaleString():String Returns the string representation of this object, formatted according to locale-specific conventions. | Object
|  | toString():String Returns the string representation of the specified object. | Object
|  | valueOf():Object Returns the primitive value of the specified object. | Object
|  | willTrigger(type:String):Boolean Checks whether an event listener is registered with this EventDispatcher object or any of its ancestors for the specified event type. | EventDispatcher

Events
Click for more information on events
Hide Inherited Events
Show Inherited Events

| Event | Summary | Defined By
--- | --- | --- | ---
|  | activate | [broadcast event] Dispatched when the Flash Player or AIR application gains operating system focus and becomes active. | EventDispatcher
|  | deactivate | [broadcast event] Dispatched when the Flash Player or AIR application operating loses system focus and is becoming inactive. | EventDispatcher
|  | exit | Signals the native process has exited. | NativeProcess
|  | standardErrorClose | Signals that the NativeProcess has closed its error stream. | NativeProcess
|  | standardErrorData | Signals that the native process has data available to read on the standard error (stderror) stream. | NativeProcess
|  | standardErrorIoError | Signals that reading from the standard error (stderror) stream has failed. | NativeProcess
|  | standardInputClose | Signals that the NativeProcess object has closed its input stream by calling the closeInput() method. | NativeProcess
|  | standardInputIoError | Signals that writing to the standard input (stdin) stream has failed. | NativeProcess
|  | standardInputProgress | Signals that the NativeProcess has written data to the input stream for the child process. | NativeProcess
|  | standardOutputClose | Signals that the NativeProcess has closed its output stream. | NativeProcess
|  | standardOutputData | Signals that the native process has data available to read on the output stream. | NativeProcess
|  | standardOutputIoError | Signals that reading from the stdout stream has failed. | NativeProcess

Property Detail

### isSupported

property

`isSupported:Boolean` [read-only]

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Indicates if running native processes is supported in the current profile. This property returns `true` only when running in the extendedDesktop profile. In addition, `NativeProcess.isSupported` is always `false` for applications installed as an AIR file. You must package an AIR application using the ADT `-target native` flag in order to use the NativeProcess class.

Implementation
`public static function get isSupported():Boolean`

### running

property

`running:Boolean` [read-only]

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Indicates if this native process is currently running. The process is running if you have called the `start()` method and the NativeProcess object has not yet dispatched an `exit` event. A NativeProcess instance corresponds to a single process on the underlying operating system. This property remains `true` as long as the underlying operating system process is executing (while the native process is starting and until the process returns an exit code to the operating system.)

Implementation
`public function get running():Boolean`

### standardError

property

`standardError:IDataInput` [read-only]

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Provides access to the standard error output from this native process. As data becomes available on this pipe, the NativeProcess object dispatches a ProgressEvent object. If you attempt to read data from this stream when no data is available, the NativeProcess object throw an EOFError exception.

The type is IDataInput because data is input from the perspective of the current process, even though it is an output stream of the child process.

Implementation
`public function get standardError():IDataInput`
Throws

| `EOFError` — if no data is present and a read operation is attempted.

Related API Elements

flash.events.ProgressEvent
flash.utils.IDataInput

### standardInput

property

`standardInput:IDataOutput` [read-only]

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Provides access to the standard input of this native process. Use this pipe to send data to this process. Each time data is written to the `input` property that data is written to the native process's input pipe as soon as possible.

The type is IDataOutput because data is output from the perspective of the current process, even though it is an input stream of the child process.

Implementation
`public function get standardInput():IDataOutput`
Throws

| `IllegalOperationError` — when writing to this value when `running` returns `false` or when attempting to write data to a closed input stream.

Related API Elements

closeInput()
IDataOutput

### standardOutput

property

`standardOutput:IDataInput` [read-only]

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Provides access to the standard output pipe of this native process. Use this pipe to read data from the native process's standard output. When data is present on this pipe, the NativeProcess object dispatches a ProgressEvent. If you attempt to read data from this stream when no data is available, the NativeProcess object throws an EOFError.

The type is IDataInput because data is input from the perspective of the current process even though it is an output stream of the child process.

Implementation
`public function get standardOutput():IDataInput`
Throws

| `EOFError` — if no data is present and a read operation is attempted.

Related API Elements

flash.utils.IDataInput
flash.events.ProgressEvent
Constructor Detail

### NativeProcess

()
Constructor

`public function NativeProcess()`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Constructs an uninitialized NativeProcess object. Call the `start()` method to start the process.

Related API Elements

start()
Method Detail

### closeInput

()
method

`public function closeInput():void`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Closes the input stream on this process. Some command line applications wait until the input stream is closed to start some operations. Once the stream is closed it cannot be re-opened until the process exits and is started again.

Events

| `ioErrorStandardInput:`IOErrorEvent`` — There is a problem closing the input stream to the process
| `standardInputClose:`Event`` — The input stream has been closed.

### exit

()
method

`public function exit(force:Boolean = false):void`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Attempts to exit the native process.

Parameters

| `force:Boolean` (default = `false`)`` — Whether the application should attempt to forcibly exit the native process, if necessary. If the `force` parameter is set to `false`, this method attempts to gracefully exit the native process. This method "asks" the native process to exit. This request may be ignored by the native process, and as a result this method is not guaranteed to actually cause the native process to exit. The NativeProcess object only dispatches a `NativeProcessExitEvent` event if the native process exits.

If the `force` parameter is set to `true`, this method attempts to forcibly exit the native process. Calling this method with the `force` parameter is set to `true` should be a last resort. Calling this method with the `force` parameter is set to `true` may have adverse affects on the state of system resources associated with the native process. For example, opened files may be left in an inconsistent state. The runtime will make its best effort to try to force the native process to exit. However, it is not guaranteed that the native process will exit. The NativeProcess object only dispatches a `NativeProcessExitEvent` event if the native process exits.

If the NativeProcess does successfully exit, it dispatches a `NativeProcessExitEvent` event.

### start

()
method

`public function start(info:NativeProcessStartupInfo):void`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Starts the native process identified by the start up info specified. Once the process starts, all of the input and output streams will be opened. This method returns immediately after the request to start the specified process has been made to the operating system. The NativeProcess object throws an `IllegalOperationError` exception if the process is currently running. The process is running if the `running` property of the NativeProcess object returns `true`. If the operating system is unable to start the process, an `Error` is thrown.

A NativeProcess instance corresponds to a single process on the underlying operating system. If you want to execute more than one instance of the same operating system process concurrently, you can create one NativeProcess instance per child process.

You can call this method whenever the `running` property of the NativeProcess object returns `false`. This means that the NativeProcess object can be reused. In other words you can construct a NativeProcess instance, call the `start()` method, wait for the `exit` event, and then call the `start()` method again. You may use a different NativeProcessStartupInfo object as the `info` parameter value in the subsequent call to the `start()` method.

The NativeProcess class and its capabilities are only available to AIR applications installed with a native installer. When debugging, you can pass the `-profile extendedDesktop` argument to ADL to enable the NativeProcess functionality. Check the `NativeProcess.isSupported` property to to determine whether native process communication is supported.

Important security considerations:

The native process API can run any executable on the user's system. Take extreme care when constructing and executing commands. If any part of a command to be executed originates from an external source, carefully validate that the command is safe to execute. Likewise, your AIR application should validate data passed to a running process.

However, validating input can be difficult. To avoid such difficulties, it is best to write a native application (such as an EXE file on Windows) that has specific APIs. These APIs should process only those commands specifically required by the AIR application. For example, the native application may accept only a limited set of instructions via the standard input stream.

AIR on Windows does not allow you to run .bat files directly. Windows .bat files are executed by the command interpreter application (cmd.exe). When you invoke a .bat file, this command application can interpret arguments passed to the command as additional applications to launch. A malicious injection of extra characters in the argument string could cause cmd.exe to execute a harmful or insecure application. For example, without proper data validation, your AIR application may call `myBat.bat myArguments c:/evil.exe`. The command application would launch the evil.exe application in addition to running your batch file.

If you call the `start()` method with a .bat file, the NativeProcess object throws an exception. The `message` property of the Error object contains the string "Error #3219: The NativeProcess could not be started."

Parameters

| `info:NativeProcessStartupInfo` — NativeProcessStartupInfo Defines information about how to start the native process.

Throws

| `IllegalOperationError` — if the NativeProcess is currently running.
| `ArgumentError` — if the nativePath property of the NativeProcessStartupInfo does not exist.
| `Error` — if the NativeProcess did not start successfully.

Related API Elements

NativeProcessStartupInfo
Event Detail

### exit

Event

Event Object Type: `flash.events.NativeProcessExitEvent`
property NativeProcessExitEvent.type = `flash.events.NativeProcessExitEvent`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Signals the native process has exited. The `exitCode` property contains the value the process returns to the host operating system on exit. If the AIR application terminates the process by calling the `exit()` method of the NativeProcess object, the `exitCode` property is set to NaN.

### standardErrorClose

Event

Event Object Type: `flash.events.Event`
property Event.type = `flash.events.Event`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Signals that the NativeProcess has closed its error stream.

### standardErrorData

Event

Event Object Type: `flash.events.ProgressEvent`
property ProgressEvent.type = `flash.events.ProgressEvent`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Signals that the native process has data available to read on the standard error (stderror) stream. The NativeProcess object dispatches this event when the child process flushes its standard error stream or when the internal buffer used to communicate between the processes is full. Do not write code that depend on the size of this internal buffer; it varies between versions and operating systems.

### standardErrorIoError

Event

Event Object Type: `flash.events.IOErrorEvent`
property IOErrorEvent.type = `flash.events.IOErrorEvent`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Signals that reading from the standard error (stderror) stream has failed. The NativeProcess object can dispatch this event when the runtime cannot read data from the native process's standard error pipe.

### standardInputClose

Event

Event Object Type: `flash.events.Event`
property Event.type = `flash.events.Event`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Signals that the NativeProcess object has closed its input stream by calling the `closeInput()` method. The NativeProcess object does not dispatch this event when the actual native process itself closes the input stream.

### standardInputIoError

Event

Event Object Type: `flash.events.IOErrorEvent`
property IOErrorEvent.type = `flash.events.IOErrorEvent`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Signals that writing to the standard input (stdin) stream has failed. The NativeProcess object dispatches this event when the `closeInput()` method fails or when the runtime cannot write data to the native process's standard input pipe.

### standardInputProgress

Event

Event Object Type: `flash.events.ProgressEvent`
property ProgressEvent.type = `flash.events.ProgressEvent`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Signals that the NativeProcess has written data to the input stream for the child process. The NativeProcess object dispatches this event when data is written to the stream. This event does not indicate whether or not the child process has read any of the data.

### standardOutputClose

Event

Event Object Type: `flash.events.Event`
property Event.type = `flash.events.Event`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Signals that the NativeProcess has closed its output stream.

### standardOutputData

Event

Event Object Type: `flash.events.ProgressEvent`
property ProgressEvent.type = `flash.events.ProgressEvent`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Signals that the native process has data available to read on the output stream. The NativeProcess object dispatches this event when the child process flushes its stdout stream or when the internal buffer used to communicate between the processes is full. Do not write code that depend on the size of this internal buffer; it varies between versions and operating systems.

### standardOutputIoError

Event

Event Object Type: `flash.events.IOErrorEvent`
property IOErrorEvent.type = `flash.events.IOErrorEvent`

Language Version: | ActionScript 3.0

Runtime Versions: | AIR 2

Signals that reading from the stdout stream has failed. The NativeProcess object can dispatch this event when the runtime cannot read data from the native process's standard output pipe.

Examples How to use this example
NativeProcessExample.as
The following example checks to see if native process communication is supported on the machine. If it is, the application sets up event listeners for the native process and launches the test.py file in the main application directory). :
Copy

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

        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 nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
                var file:File = File.applicationDirectory.resolvePath("test.py");
                nativeProcessStartupInfo.executable = file;

                var processArgs:Vector.<String> = new Vector.<String>();
                processArgs[0] = "foo";
                nativeProcessStartupInfo.arguments = processArgs;

                process = new NativeProcess();
                process.start(nativeProcessStartupInfo);
                process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);
                process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData);
                process.addEventListener(NativeProcessExitEvent.EXIT, onExit);
                process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError);
                process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError);
            }

            public function onOutputData(event:ProgressEvent):void
            {
                trace("Got: ", process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable));
            }

            public function onErrorData(event:ProgressEvent):void
            {
                trace("ERROR -", process.standardError.readUTFBytes(process.standardError.bytesAvailable));
            }

            public function onExit(event:NativeProcessExitEvent):void
            {
                trace("Process exited with ", event.exitCode);
            }

            public function onIOError(event:IOErrorEvent):void
            {
                 trace(event.toString());
            }
        }
    }

Add the following Python script to a file named test.py in your application directory (and the ensure that Python is installed):

     #!/usr/bin/python
     # ------------------------------------------------------------------------------
     # Sample Python script
     # ------------------------------------------------------------------------------

     import sys

     for word in sys.argv: #echo the command line arguments
         print word

     print "HI FROM PYTHON"
     print "Enter user name"
     line = sys.stdin.readline()

     sys.stdout.write("hello," + line)

© 2015 Adobe Systems Incorporated. All rights reserved.
Mon Apr 10 2017, 12:28 PM -07:00