使用as3 NativeProcess来运行windows cmd

时间:2016-03-03 14:31:54

标签: actionscript-3 cmd

我使用NativeProcess来运行我的.cmd文件,以便在Windows上使用Imagemagick的转换。

cmd是

convert -resize 1%x2% 3% 4%

在我的电脑上,它看起来很正常。 但在其他一些计算机上,这个bug看起来像是“-resize”是乱码。

然后我改变了cmd

convert 1% 2%x3% 4% 5%

但在某些计算机上,它仍有错误。

是空气输出UTF-8,而Windows CMD是否使用Unicode?

如何使用它不会产生此错误?

我的代码是

private var mProcess:NativeProcess;
private function convertImgToTargetPng(filePath:String,resultFilePath:String,width:Number,height:Number,scale:Number=1):void
{
    var convertFile:File =  File.applicationDirectory.resolvePath("script").resolvePath("convert.cmd");
    var nativeProcessStartupInfo = new NativeProcessStartupInfo();
    nativeProcessStartupInfo.executable = convertFile;
    nativeProcessStartupInfo.workingDirectory = File.userDirectory;

    var processArgs:Vector.<String> = new Vector.<String>();
    processArgs.push("-resize");
    processArgs.push(width*scale);
    processArgs.push(height*scale);
    processArgs.push(filePath);
    processArgs.push(resultFilePath);
    nativeProcessStartupInfo.arguments = processArgs;
    mProcess = new NativeProcess();
    mProcess.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onConvertErrorHandler);
    mProcess.addEventListener(NativeProcessExitEvent.EXIT, onConvertExitHandler);
    try
    {
        mProcess.start(nativeProcessStartupInfo);
    }
    catch (e : Error)
    {
        Alert.show("convert failed: " + e.message);
    }

}

private function onConvertErrorHandler(event : ProgressEvent):void
{
    var data:String = mProcess.standardError.readUTFBytes(mProcess.standardError.bytesAvailable);
    Alert.show("convert error :" + data);
}

private function onConvertExitHandler(event : NativeProcessExitEvent):void
{
    mProcess.removeEventListener(ProgressEvent.STANDARD_ERROR_DATA, onConvertErrorHandler);
    mProcess.removeEventListener(NativeProcessExitEvent.EXIT, onConvertExitHandler);

    Alert.show("convert success");
}

1 个答案:

答案 0 :(得分:0)

未经测试但您可以尝试...

制作一个类似于convert 1% 2% 3% 4%

的已更改CMD文件

并将您的AS3代码部分更新为这样......

var processArgs:Vector.<String> = new Vector.<String>();
    processArgs.push("-resize");

    processArgs.push(String ( String(width*scale) + "x" + String(height*scale) ) );

    processArgs.push(filePath);

    processArgs.push(resultFilePath);

现在让我告诉它如何。

除了 .cmd 文件外,为什么不使用 convert.exe 文件本身运行该过程呢? :
如果 convert.exe 位于此处: c:\ program files \ imagemagick \ convert.exe
然后使用AS3代码中的路径位置{{1} }

c:\\program files\\imagemagick\\convert.exe