You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Adobe AIR应用中检测Windows系统是否安装Flash Player?

在Windows AIR应用中检测Flash Player的可行方案

我之前帮不少AIR开发者解决过Windows上检测Flash Player的问题,你试过的Capabilities.version和HTMLLoader.swfCapability确实有坑——前者有时候会返回AIR自带的Flash版本,后者更是经常误判为已安装。给你几个实测靠谱的方案:

方法一:通过Windows注册表检测(最准确)

Flash Player在Windows系统的注册表中会留存官方的安装信息,包括版本号,我们可以通过AIR的NativeProcess执行系统命令来查询:

步骤说明:

  1. 首先在你的AIR应用application.xml中添加扩展桌面权限,因为NativeProcess需要这个权限:
    <supportedProfiles>extendedDesktop</supportedProfiles>
    
  2. 编写代码查询注册表(兼顾32位和64位系统):
    import flash.desktop.NativeProcess;
    import flash.desktop.NativeProcessStartupInfo;
    import flash.filesystem.File;
    import flash.events.ProgressEvent;
    import flash.events.IOErrorEvent;
    import flash.events.NativeProcessExitEvent;
    
    var processInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
    var regExe:File = new File("C:\\Windows\\System32\\reg.exe");
    processInfo.executable = regExe;
    
    // 先尝试查询64位系统的注册表路径
    var args64:Vector.<String> = new Vector.<String>();
    args64.push("query");
    args64.push("HKLM\\SOFTWARE\\Wow6432Node\\Macromedia\\FlashPlayer");
    processInfo.arguments = args64;
    
    var process:NativeProcess = new NativeProcess();
    process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputReceived);
    process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, try32BitPath);
    process.addEventListener(NativeProcessExitEvent.EXIT, onProcessExit);
    process.start(processInfo);
    
    function onOutputReceived(event:ProgressEvent):void {
        var output:String = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable);
        if (output.indexOf("Version") !== -1) {
            var versionStr:String = output.split("Version")[1].trim();
            trace(`Flash Player已安装,版本:${versionStr}`);
        }
    }
    
    function try32BitPath(event:IOErrorEvent):void {
        // 64位路径查询失败,切换到32位系统的注册表路径
        var args32:Vector.<String> = new Vector.<String>();
        args32.push("query");
        args32.push("HKLM\\SOFTWARE\\Macromedia\\FlashPlayer");
        processInfo.arguments = args32;
        process.start(processInfo);
    }
    
    function onProcessExit(event:NativeProcessExitEvent):void {
        if (event.exitCode !== 0) {
            trace("未安装Flash Player");
        }
    }
    

方法二:通过加载测试SWF检测(验证可用性)

如果你的需求是确认系统能否正常运行SWF(而不只是是否安装),可以嵌入一个极小的空SWF文件,通过Loader加载来判断:

步骤说明:

  1. 制作一个1x1的空SWF文件(命名为test.swf),打包到AIR应用的资源目录中;
  2. 编写加载代码:
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    
    var swfLoader:Loader = new Loader();
    swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSwfLoadSuccess);
    swfLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onSwfLoadFail);
    swfLoader.load(new URLRequest("test.swf"));
    
    function onSwfLoadSuccess(event:Event):void {
        trace("Flash Player已安装且可正常运行");
        // 这里也可以获取版本信息
        var flashVersion:String = Capabilities.version;
        trace(`版本:${flashVersion}`);
    }
    
    function onSwfLoadFail(event:IOErrorEvent):void {
        trace("未安装Flash Player或版本过低无法运行SWF");
    }
    
    注意:如果你的AIR应用使用的是AIR Runtime,它本身包含Flash Player核心,但这个方法检测的是系统全局的Flash Player环境(比如浏览器插件对应的运行时)。

方法三:检查安装目录文件(快速判断)

Flash Player在Windows上的默认安装路径比较固定,我们可以通过AIR的File类直接检查关键文件是否存在:

import flash.filesystem.File;

// 检查64位系统的Flash插件文件
var flashFile64:File = new File("C:\\Windows\\SysWOW64\\Macromed\\Flash\\NPSWF32.dll");
// 检查32位系统的Flash插件文件
var flashFile32:File = new File("C:\\Windows\\System32\\Macromed\\Flash\\NPSWF32.dll");

if (flashFile64.exists || flashFile32.exists) {
    trace("Flash Player已安装");
} else {
    trace("未安装Flash Player");
}

这种方法简单快速,但无法直接获取版本号,适合只需要判断是否安装的场景。


内容的提问来源于stack exchange,提问作者bio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:58:38