位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 沙箱應(yīng)用程序

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-11

    現(xiàn)在應(yīng)回過頭來,看看通用Windows平臺(tái)的.NET框架的局限性。運(yùn)行在移動(dòng)設(shè)備的應(yīng)用程序?qū)\(yùn)行它們的操作系統(tǒng)只有有限的訪問權(quán)限,這意味著不能編寫某些類型的應(yīng)用程序。如果需要直接訪問文件系統(tǒng),以訪問Windows系統(tǒng)文件,就必須編寫經(jīng)典的Windows桌面應(yīng)用程序。

    利用C#編寫通用應(yīng)用程序時(shí),會(huì)發(fā)現(xiàn)應(yīng)用程序引用的.NET Framework成為一個(gè)限制因素,缺少了常見的名稱空間和類,或者可用的方法比以前更少。如果打開Visual Studio,創(chuàng)建一個(gè)新的Blank應(yīng)用程序,然后擴(kuò)展References節(jié)點(diǎn),將看到該引用非常不同于Windows桌面應(yīng)用程序中的引用。這里有一個(gè)對(duì)分析器的引用,以幫助監(jiān)控應(yīng)用程序的各個(gè)方面,有一個(gè)對(duì).NET Core for UWP的引用,還有一個(gè)對(duì)Universal Windows的引用。你可能會(huì)認(rèn)為,可以簡(jiǎn)單地改變引用,從而使用正常的.NETFramework。你可以這么做,但當(dāng)你試著把應(yīng)用程序發(fā)布到Windows Store時(shí),應(yīng)用程序會(huì)因?yàn)椴环弦?guī)范而被拒絕。

    Windows通用應(yīng)用程序的沙箱性質(zhì),以及它們獲得Windows Store認(rèn)可之前必須經(jīng)歷的過程,意味著用戶應(yīng)該很少擔(dān)心通過Store會(huì)下載到惡意的應(yīng)用程序。顯然,有些人會(huì)試圖規(guī)避這一點(diǎn),用戶不應(yīng)該放松瞥惕;然而,通過Windows Store應(yīng)用把惡意程序放在Windows計(jì)算機(jī)上,要大大難于通過正常方式來下載和安裝應(yīng)用程序。


1.磁盤訪問

    桌面應(yīng)用程序差不多可以隨意訪問磁盤,但有一些例外。一個(gè)這樣的例外是,通常禁止它們寫入Program Files文件夾和其他系統(tǒng)文件夾。Windows迎用應(yīng)用程序只能直接訪問少數(shù)非常特定的磁盤位置。這些位置包括安裝應(yīng)用程序的文件夾、與應(yīng)用程序相關(guān)的AppData文件夾以及一些特殊文件夾,如Documents文件夾。文件和文件夾的訪問權(quán)限也移到通用應(yīng)用程序的.NETFramework中,確保開發(fā)人員不會(huì)意外地寫入某個(gè)被禁止的 位置。

    為允許用戶控制應(yīng)該在應(yīng)用程序中存儲(chǔ)和讀取什么地方的文件,Windows提供了三個(gè)File Picker協(xié)定:FolderOpenPicker、FileOpenPicker和FileSavePicker。這些選擇器類可以在應(yīng)用程序中用于獲得本地磁盤的安全訪問權(quán)限.

    如前所述,也可以使用KnownFolders類訪問設(shè)備上的資源。對(duì)于要讀寫的位置,如果只有用戶擁有訪問權(quán)限,應(yīng)用程序才能打開它們,則應(yīng)使用KnownFolders類。


2,串行化、流和異步編程

    使用[Serializable]特性允許類的序列化。通用應(yīng)用程序的.NET不包含這個(gè)特性,但可以使用一個(gè)類似的特性[DataContract]。DataContract特性使用DataContractSerializer類來序列化類的內(nèi)容。為把序列化的內(nèi)容放在磁盤上或從磁盤上序列化,需要使用一些文件訪問類型,但與正常.NET不同,不能直接創(chuàng)建它們。而應(yīng)使用文件選擇器創(chuàng)建流對(duì)象,再用流對(duì)象和DataContractSerializer來保存、加載文件。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部