我正在运行一个为桌面做的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无法解决此问题。您可以通过右键单击文件夹来修改安全设置,也可以简单地避免使用应用程序文件夹来存储任何