【问题标题】:AIR Native Process works on Mac, but not WindowsAIR 本机进程适用于 Mac,但不适用于 Windows
【发布时间】:2017-06-06 02:54:25
【问题描述】:

我正在使用 Flash CC 构建一个 AIR 应用程序,以便我可以使用本机进程。在我将它集成到我的完整项目之前,我创建了一个小型测试项目来看看它是否可以工作。我在 Windows 中尝试过,但没有成功。不过,我切换到 Mac 并让它在那里工作。

本机进程由按键触发。该文件作为 Windows 安装程序发布,而不是 Air 包。我已确保在 xml 文件中包含扩展桌面。我已经仔细检查了文件路径。还有其他原因这不起作用吗?

package  {

    import flash.display.MovieClip;
    import flash.filesystem.File;
    import flash.events.KeyboardEvent;
    import flash.desktop.NativeProcess;
    import flash.desktop.NativeProcessStartupInfo;


    public class Main extends MovieClip {

        var exe:File = new File("C:\Windows\System32\notepad.exe");
        var nativeProcess:NativeProcess = new NativeProcess();
        var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
        var args:Vector.<String> = new Vector.<String>();

        public function startProcess(event:KeyboardEvent):void
        {
            if (event.keyCode == 65) {
                nativeProcessStartupInfo.executable = exe;
                args.push("C:/Users/Tristan/Documents/TVCR/airTestFile.rtf");
                nativeProcessStartupInfo.arguments = args;
                nativeProcess.start(nativeProcessStartupInfo);
            }
        }
    }   
}

【问题讨论】:

  • 它是否在“测试电影”模式下工作?该脚本看起来不错,所以我建议进行一些调试。制作一个文本字段以输出日志信息,例如按键是否触发事件,以及 try ... catch NativeProcess.start 以获取异常.
  • 本机进程在“测试电影”模式下不起作用。它们仅在发布 Windows 安装程序时才有效。我不确定如何为日志信息创建一个文本字段。你能给我指个教程吗?
  • 对不起,我不明白...你不知道如何在Library中创建一个MovieClip,如何设计一个TextField 在其中,如何将它们添加到主时间线?
  • 抱歉不清楚。我不知道如何获取文本字段以输出日志信息。
  • 作为答案发布。

标签: windows flash air


【解决方案1】:

如何输出一些调试信息。如果键盘事件真的触发了处理方法,下面的代码会显示一些消息。

public function startProcess(event:KeyboardEvent):void
{
    // LogText:TextField
     LogText.appendText("\n\nKey Pressed: " + event.keyCode);
}

如何输出和诊断异常:

try
{
    nativeProcess.start(nativeProcessStartupInfo);
    LogText.appendText("\n\nThe process has been started without exceptions.");
}
catch (fail:Error)
{
    // LogText:TextField
    LogText.appendText("\n\n" + fail.getStackTrace());
}

【讨论】:

  • 这返回了键盘事件的答案,但 try 和 catch 参数没有返回任何内容。
  • @browntastic 然后将其他所有内容放在 try ... catch 块下,以了解它在哪里失败。
  • 我收到错误“1120:未定义属性的访问失败。”发布时。
  • 好的,我想通了,看起来文件路径格式错误。我已经发布了答案。感谢您对此的帮助。
  • @browntastic 哦,你已经弄清楚了。很好。
【解决方案2】:

看来我使用的文件路径格式不正确。

C:\Windows\System32\notepad.exe

应该是

C:\\Windows\\System32\\notepad.exe

【讨论】:

    【解决方案3】:

    Windows 的文件路径必须使用双反斜杠“\”,因为单反斜杠会被解释为转义。

    使用File.separator 可以方便地使用File.separator,因为它会为 Windows 执行“\”,为 Mac 执行“/” /Linux

    http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filesystem/File.html#separator

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多