Air App不会在用户(非管理员)模式下使用openAsync/readUTFBytes读取本地文本文件



我正在运行一个为桌面做的Air应用程序,它来自机器中已经部署的实际安装的可执行文件(不是来自Flash Pro/Flex dev.环境)。由于某种原因,除非我以管理员身份从操作系统运行我的应用程序,否则应用程序不会读取存储在同一应用程序文件夹中的文本文件。

当我以管理员身份运行该应用程序时,或者在开发环境中运行时,它运行良好。也许这与一些安全问题有关?我阅读了adobeair文档,这应该可以。。。

我在用户上使用openAsync/readUTFBytes,如下所示:

var continueGamesConnection:FileStream();
var continueFile:File = new File(File.applicationDirectory.resolvePath("continueGames.txt").nativePath.toString());
continueGamesConnection.addEventListener(Event.COMPLETE, openSavedGames);
continueGamesConnection.openAsync(continueFile, FileMode.UPDATE);
function openSavedGames(event:Event):void
{
    continueGamesConnection.removeEventListener(Event.COMPLETE, openSavedGames);
    var content:URLVariables = new URLVariables();
    var loadedContent:String = new String();
    loadedContent = continueGamesConnection.readUTFBytes(continueGamesConnection.bytesAvailable);
    content.decode(loadedContent);
    variableX = content. variableX
    //etc, etc.
    continueGamesConnection.close();    
}

顺便说一句,我也尝试过使用FileMode.READ和其他方法,但它仍然给我带来同样的问题。只有在管理模式下或从dev.环境中运行时才有效。

这很令人沮丧,我试着阅读其他帖子,但没有任何运气。。。人们对这类问题使用什么解决方案?

我已经看到,你可以以某种方式将应用程序设置为管理员运行,我想这是可行的。然而,这应该可以正常工作,因为它似乎没有违反Air的任何安全API。看起来有些过头了。但即便如此,我该怎么做呢?

非常感谢您的帮助!

通常出于安全原因,应用程序没有对File.applicationDirectory的写入权限。

建议您使用File.applicationStorageDirectory,因为这是保存用户数据(如保存游戏文件)的最合适位置。

或者,您也可以让用户浏览到具有FileReference类的目录,该目录可能有权限,也可能没有权限。

假设您使用的是Windows SO,您面临的问题是用户对文件夹C:\Program Files和C:\Program Files(x86)的访问限制,而Flash或AIR无法解决此问题。您可以通过右键单击文件夹来修改安全设置,也可以简单地避免使用应用程序文件夹来存储任何

最新更新