位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 沙箱应用程序

提问人:刘团圆发布时间:2020-12-11

    现在应回过头来,看看通用Windows平台的.NET框架的局限性。运行在移动设备的应用程序对运行它们的操作系统只有有限的访问权限,这意味着不能编写某些类型的应用程序。如果需要直接访问文件系统,以访问Windows系统文件,就必须编写经典的Windows桌面应用程序。

    利用C#编写通用应用程序时,会发现应用程序引用的.NET Framework成为一个限制因素,缺少了常见的名称空间和类,或者可用的方法比以前更少。如果打开Visual Studio,创建一个新的Blank应用程序,然后扩展References节点,将看到该引用非常不同于Windows桌面应用程序中的引用。这里有一个对分析器的引用,以帮助监控应用程序的各个方面,有一个对.NET Core for UWP的引用,还有一个对Universal Windows的引用。你可能会认为,可以简单地改变引用,从而使用正常的.NETFramework。你可以这么做,但当你试着把应用程序发布到Windows Store时,应用程序会因为不符合规范而被拒绝。

    Windows通用应用程序的沙箱性质,以及它们获得Windows Store认可之前必须经历的过程,意味着用户应该很少担心通过Store会下载到恶意的应用程序。显然,有些人会试图规避这一点,用户不应该放松瞥惕;然而,通过Windows Store应用把恶意程序放在Windows计算机上,要大大难于通过正常方式来下载和安装应用程序。


1.磁盘访问

    桌面应用程序差不多可以随意访问磁盘,但有一些例外。一个这样的例外是,通常禁止它们写入Program Files文件夹和其他系统文件夹。Windows迎用应用程序只能直接访问少数非常特定的磁盘位置。这些位置包括安装应用程序的文件夹、与应用程序相关的AppData文件夹以及一些特殊文件夹,如Documents文件夹。文件和文件夹的访问权限也移到通用应用程序的.NETFramework中,确保开发人员不会意外地写入某个被禁止的 位置。

    为允许用户控制应该在应用程序中存储和读取什么地方的文件,Windows提供了三个File Picker协定:FolderOpenPicker、FileOpenPicker和FileSavePicker。这些选择器类可以在应用程序中用于获得本地磁盘的安全访问权限.

    如前所述,也可以使用KnownFolders类访问设备上的资源。对于要读写的位置,如果只有用户拥有访问权限,应用程序才能打开它们,则应使用KnownFolders类。


2,串行化、流和异步编程

    使用[Serializable]特性允许类的序列化。通用应用程序的.NET不包含这个特性,但可以使用一个类似的特性[DataContract]。DataContract特性使用DataContractSerializer类来序列化类的内容。为把序列化的内容放在磁盘上或从磁盘上序列化,需要使用一些文件访问类型,但与正常.NET不同,不能直接创建它们。而应使用文件选择器创建流对象,再用流对象和DataContractSerializer来保存、加载文件。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部