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

时间:2014-10-03 15:07:53

标签: actionscript-3 flash air filesystems

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

当我以管理员身份运行应用程序时,或者在开发环境中运行应用程序时,它运行正常也许这与某些安全问题有关?我阅读了adobe air文档,这应该有用......

我在用户上使用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和其他人,它仍然给我同样的问题。仅在管理员模式或开发时运行时才有效。环境。

这非常令人沮丧,我试着阅读其他帖子而没有任何运气......人们使用什么解决方案来解决这类问题?

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

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

假设您使用的是Windows SO,那么您遇到的问题是文件夹C:\ Program Files和C:\ Program Files(x86)的用户访问限制,您无法从Flash或AIR执行任何操作解决这个问题。您可以通过右键单击文件夹来修改安全设置,或者只是避免使用app文件夹来存储任何内容