我为小型Intranet开发了Adobe Air App。所有计算机都已运行Windows 7,但现在开始被Windows 10系统取代。我可以使用Windows 7计算机上的文件类访问映射的驱动器“ I”和本地“ C”驱动器,但在Windows 10上只能使用映射的驱动器“ I”。
编辑:Capabilities.localFileReadDisable在Windows 7和Windows 10系统上均返回false。
********如果Air可以获取有关正在运行的计算机的任何特定信息,序列号,mac地址,计算机名称等,则可以绕过对本地文件的需求。实际上,我获得的信息没有区别得到的,它必须是该计算机唯一的。使用Cookie并不是一种选择,因为它们易变********
以下代码完成了两件事。
首先,它显示Air文件的运行版本,并在映射的驱动器上查找具有最新版本的文件。如果它们相同,则计算机正在运行最新版本。如果它们不同,则会向用户显示新版本,指示应更新应用程序。
第二,它从驻留在本地驱动器上的文本文件中获取特定计算机的名称。该名称用于报告中以指示正在使用哪台计算机。可能有一种更好的方法来完成此操作,但是在Windows 7上,它对我来说效果很好。不幸的是,Windows 10在尝试访问本地驱动器上的文件时引发错误。
错误#2044:未处理的ioError :。 text =错误#2032:流错误。网址:file:/// C:/machineName.txt
任何帮助将不胜感激。
var appXML:XML = NativeApplication.nativeApplication.applicationDescriptor;
var ns:Namespace = appXML.namespace();
version_txt.text = "V"+appXML.ns::versionNumber;
// Define path to the version number
var updatePath:URLRequest = new URLRequest("file:///I:/air/update.txt");
// Define path to name of specific pc
var machineName:URLRequest = new URLRequest("file:///C:/machineName.txt");
// Define the URLLoaders
var updateLoader:URLLoader = new URLLoader();
function checkUpdate():void{
updateLoader.load(updatePath);
}
var nameLoader:URLLoader = new URLLoader();
function checkName():void{
nameLoader.load(machineName);
}
// Listen for when the file has finished loading.
updateLoader.addEventListener(Event.COMPLETE, loaderComplete);
function loaderComplete(e:Event):void
{
// The output of the text file is available via the data property
// of URLLoader.
if(Number(appXML.ns::versionNumber)<Number(updateLoader.data)){
update_txt.text = "UPDATE TO V"+updateLoader.data;
}
}
nameLoader.addEventListener(Event.COMPLETE, nameComplete);
var name_txt:String = new String;
function nameComplete(e:Event):void{
name_txt = nameLoader.data;
var holder:String = version_txt.text;
version_txt.text = name_txt+" ** "+holder;
}