class NativeProcess
package openfl.desktop
extends EventDispatcher
Available on AIR, Android, HashLink, Linux, Neko, Windows, iOS, macOS
The NativeProcess class provides command line integration and general launching capabilities. The NativeProcess class lets an OpenFL application execute native processes on the host operating system. The OpenFL application 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 Haxe
"sys" targets and AIR applications installed with a native installer
("extendedDesktop" profile applications). When debugging an AIR application,
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.
Static variables
staticread onlyisSupported:Bool = true
Indicates if running native processes is supported in the current
OpenFL target. This property returns true
only when running on Haxe
"sys" targets or the Adobe AIR "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 or the -target bundle
flag in order to use the
NativeProcess class in AIR.
Constructor
new()
Constructs an uninitialized NativeProcess object. Call the start()
method to start the process.
Variables
read onlyrunning:Bool
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.)
read onlystandardError:IDataInput
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.
read onlystandardInput:IDataOutput
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.
read onlystandardOutput:IDataInput
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.
Methods
closeInput():Void
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.
start(info:NativeProcessStartupInfo):Void
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 Haxe
"sys" targets and AIR applications installed with a native installer.
When debugging AIR, 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 OpenFL 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 OpenFL 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."