• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

            Microsoft .NET 框架 FAQ

            Microsoft .NET 框架 FAQ

            Microsoft Corporation

            2001 年 7 月

            摘要:本文包含有關(guān) Microsoft .NET 和 Microsoft .NET 框架的常見問題。(共 15 頁打印頁)

            內(nèi)容

            概念性問題
            運(yùn)行庫技術(shù)問題
                術(shù)語
                程序集
                應(yīng)用程序部署和隔離
                垃圾回收
                遠(yuǎn)程處理
                互操作性
                安全性

            概念性問題

            運(yùn)行庫技術(shù)問題

            術(shù)語

            程序集

            應(yīng)用程序部署和隔離

            垃圾回收

            遠(yuǎn)程處理

            互操作性

            安全性

            概念性問題

            什么是 .NET 框架?

            Microsoft .NET 框架是生成、部署和運(yùn)行 Web 服務(wù)及應(yīng)用程序的平臺。它提供了一個(gè)生產(chǎn)率高且基于標(biāo)準(zhǔn)的多語言環(huán)境,用于將現(xiàn)有投資與下一代應(yīng)用程序和服務(wù)集成,同時(shí)提供了解決 Internet 規(guī)模應(yīng)用程序的部署和操作難題的靈活性。.NET 框架由三個(gè)主要部分組成:公共語言運(yùn)行庫、統(tǒng)一類庫的分層集合和稱為 ASP.NET 的 Active Server Pages 組件化版本。

            返回到頂部

            運(yùn)行庫技術(shù)問題

            術(shù)語

            什么是公共語言運(yùn)行庫 (CLR)?

            公共語言運(yùn)行庫是用于 .NET 框架應(yīng)用程序的執(zhí)行引擎。

            它提供若干服務(wù),包括:

            • 代碼管理(加載和執(zhí)行)
            • 應(yīng)用程序內(nèi)存隔離
            • 類型安全驗(yàn)證
            • IL 到本機(jī)代碼的轉(zhuǎn)換
            • 對元數(shù)據(jù)(增強(qiáng)型類型信息)的訪問
            • 托管對象內(nèi)存的管理
            • 代碼訪問安全性的強(qiáng)制
            • 異常處理,包括語言間異常
            • 托管代碼、COM 對象和預(yù)先存在的 DLL(非托管代碼和數(shù)據(jù))間的相互操作
            • 對象布局的自動(dòng)化
            • 對開發(fā)人員服務(wù)的支持(分析、調(diào)試等等)

            返回到頂部

            什么是通用類型系統(tǒng) (CTS)?

            通用類型系統(tǒng)是一個(gè)內(nèi)置在公共語言運(yùn)行庫中的豐富的類型系統(tǒng),它支持大多數(shù)編程語言中存在的類型和操作。通用類型系統(tǒng)支持廣泛的編程語言的完整實(shí)現(xiàn)。

            返回到頂部

            什么是公共語言規(guī)范 (CLS)?

            公共語言規(guī)范是一組構(gòu)造和約束,它充當(dāng)庫編寫器和編譯器編寫器的向?qū)АK箮焱耆赏ㄟ^任何支持 CLS 的語言使用,并使那些語言可以相互集成。公共語言規(guī)范是通用類型系統(tǒng)的一個(gè)子集。對于正在編寫將由其他開發(fā)人員使用的代碼的應(yīng)用程序開發(fā)人員,公共語言規(guī)范也非常重要。當(dāng)開發(fā)人員按照 CLS 規(guī)則設(shè)計(jì)可公開訪問的 API 時(shí),這些 API 很容易通過面向公共語言運(yùn)行庫的所有其他編程語言使用。

            返回到頂部

            什么是 Microsoft 中間語言 (MSIL)?

            MSIL 是與 CPU 無關(guān)的指令集,其中編譯進(jìn)了 .NET 框架程序。它包含在對象上加載、存儲、初始化和調(diào)用方法的指令。

            在與元數(shù)據(jù)及公共類型系統(tǒng)組合后,MSIL 允許真正的語言間集成。

            在執(zhí)行之前,MSIL 將轉(zhuǎn)換成機(jī)器碼,并且不被解釋。

            返回到頂部

            什么是托管代碼和托管數(shù)據(jù)?

            托管代碼是為面向公共語言運(yùn)行庫的服務(wù)編寫的代碼(請參閱“什么是公共語言運(yùn)行庫?”)。為了面向這些服務(wù),該代碼必須向運(yùn)行庫提供最低級別的信息(元數(shù)據(jù))。默認(rèn)情況下,所有 C#、Visual Basic .NET 和 JScript .NET 代碼都受托管。默認(rèn)情況下,Visual Studio .NET C++ 代碼不受托管,但編譯器可以通過指定命令行開關(guān) (/CLR) 來產(chǎn)生托管代碼。

            與托管代碼密切相關(guān)的是托管數(shù)據(jù)(由公共語言運(yùn)行庫的垃圾回收器分配和釋放的數(shù)據(jù))。默認(rèn)情況下,C#、Visual Basic 和 JScript .NET 數(shù)據(jù)受托管。然而,通過使用特殊的關(guān)鍵字可以將 C# 數(shù)據(jù)標(biāo)記為非托管。默認(rèn)情況下,Visual Studio .NET C++ 數(shù)據(jù)不受托管(即使在使用 /CLR 開關(guān)時(shí)),但在使用 C++ 托管擴(kuò)展時(shí),可以通過使用 __gc 關(guān)鍵字將類標(biāo)記為托管。正如名稱所暗示的,這意味著用于類實(shí)例的內(nèi)存受垃圾回收器的托管。另外,類成為 .NET 框架社區(qū)的一名完全參與的成員,這既帶來了好處,也帶來了限制。其中一個(gè)好處是與用其他語言編寫的類的正確互操作性(例如,托管 C++ 類可以從 Visual Basic 類繼承)。其中一個(gè)限制是托管類只能從基類繼承。

            返回到頂部

            程序集

            什么是程序集?

            程序集是 .NET 框架應(yīng)用程序的主要構(gòu)造塊。它是一個(gè)功能集合,并以單個(gè)實(shí)現(xiàn)單元(一個(gè)或多個(gè)文件)的形式生成、版本化和部署。所有托管類型和資源或者只在其實(shí)現(xiàn)單元中標(biāo)記為可訪問,或者在該單元外由代碼標(biāo)記為可訪問。

            程序集通過其清單(每個(gè)程序集不可缺少的部分)進(jìn)行自我描述。清單可以:

            • 建立程序集標(biāo)識(以文本名稱的形式)、版本、區(qū)域性和數(shù)字簽名(如果程序集將在應(yīng)用程序間共享)。
            • 定義組成程序集實(shí)現(xiàn)的文件(按名稱和文件散列)。
            • 指定組成程序集的類型和資源,包括從程序集導(dǎo)出的類型和資源。
            • 逐條列出其他程序集上的編譯時(shí)依賴項(xiàng)。
            • 指定程序集正確運(yùn)行所需的權(quán)限集。

            該信息在運(yùn)行時(shí)用于解析引用、強(qiáng)制版本綁定策略和驗(yàn)證加載程序集的完整性。運(yùn)行庫可以確定和定位任何運(yùn)行對象的程序集,因?yàn)槊總€(gè)類型均加載在程序集的上下文中。程序集也是應(yīng)用代碼訪問安全權(quán)限的單元。在確定給程序集包含的代碼授予什么權(quán)限時(shí),分別考慮每個(gè)程序集的標(biāo)識證據(jù)。

            程序集自我描述的特性也有助于使無影響安裝和 XCOPY 部署可行。

            返回到頂部

            什么是專用程序集和共享程序集?

            專用程序集僅由單個(gè)應(yīng)用程序使用,并存儲在該應(yīng)用程序的安裝目錄中(或其中的子目錄中)。共享程序集是一個(gè)可以由多個(gè)應(yīng)用程序引用的程序集。為了共享程序集,必須給予該程序集一個(gè)加密的強(qiáng)名稱(有時(shí)又稱強(qiáng)名稱),為此目的顯式生成程序集。相比之下,專用程序集名稱只需在使用它的應(yīng)用程序中是唯一的。

            通過區(qū)分專用程序集和共享程序集,我們以顯式?jīng)Q策的形式引入共享概念。只需將專用程序集部署到應(yīng)用程序目錄,即可保證該應(yīng)用程序只與用來生成和部署它的位一起運(yùn)行。對專用程序集的引用只被本地解析到專用應(yīng)用程序目錄。

            可以舉出多個(gè)生成和使用共享程序集的理由,如表示版本策略的能力。共享程序集有一個(gè)加密的強(qiáng)名稱,這意味著只有此程序集的作者具有產(chǎn)生程序集新版本的密鑰。因此,如果您生成一個(gè)策略語句,表明自己希望接受程序集的新版本,則應(yīng)確信版本更新將受作者的控制和驗(yàn)證。否則,您不必接受它們。

            對于本地安裝的應(yīng)用程序,共享程序集通常被顯式安裝到全局程序集緩存中(由 .NET 框架維護(hù)的程序集的本地緩存)。.NET 框架版本管理功能的關(guān)鍵是:下載的代碼不影響本地安裝的應(yīng)用程序的執(zhí)行。下載的代碼放置在特殊的下載緩存中,并且在計(jì)算機(jī)上不是全局可用的,即使以共享程序集的形式生成了某些下載組件。

            .NET 框架隨附的類均以共享程序集的形式生成。

            返回到頂部

            如果要生成共享程序集,需要簽名和管理密鑰對的系統(tǒng)開銷嗎?

            生成共享程序集的確涉及使用加密密鑰。在生成程序集時(shí),只有公鑰是確實(shí)需要的。面向 .NET 框架的編譯器在生成程序集時(shí)提供命令行選項(xiàng)(或使用自定義屬性)來提供公鑰。常見的做法是在源數(shù)據(jù)庫中保留通用公鑰的一個(gè)副本,并將生成腳本指向該密鑰。在交付程序集前,必須用相應(yīng)的私鑰完全簽名程序集。用稱為 SN.exe(強(qiáng)名稱)的 SDK 工具來完成此工作。

            與 Authenticode 不同,強(qiáng)名稱簽名不涉及證書。不涉及第三方單位,沒有要支付的費(fèi)用,也沒有證書鏈。另外,驗(yàn)證強(qiáng)名稱比驗(yàn)證 Authenticode 的系統(tǒng)開銷低得多。然而,強(qiáng)名稱不就是否信任特定的發(fā)布者做出任何聲明。強(qiáng)名稱使您可以確保給定程序集的內(nèi)容沒有被篡改,并且在運(yùn)行時(shí)以您的名義加載的程序集來自您開發(fā)時(shí)所針對的同一發(fā)布者。但它不就是否可以信任此發(fā)布者的標(biāo)識做出任何聲明。

            返回到頂部

            命名空間名稱和程序集名稱之間的差異是什么?

            命名空間是類型的邏輯命名方案,此方案中簡單的類型名稱(如 MyType)用以點(diǎn)分隔的分層名稱開頭。這樣的命名方案完全受開發(fā)人員控制。例如,類型 MyCompany.FileAccess.A 和 MyCompany.FileAccess.B 可能在邏輯上應(yīng)具有與文件訪問相關(guān)的功能。.NET 框架使用分層命名方案將類型分為相關(guān)功能(例如 ASP.NET 應(yīng)用程序框架)或遠(yuǎn)程處理功能的邏輯類別。設(shè)計(jì)工具可以利用命名空間使開發(fā)人員在代碼中瀏覽和引用類型更容易。命名空間的概念與程序集的概念無關(guān)。單個(gè)程序集可以包含分層名稱具有不同命名空間根的類型,而邏輯命名空間根可以跨越多個(gè)程序集。在 .NET 框架中,命名空間是邏輯設(shè)計(jì)時(shí)命名便利,而程序集在運(yùn)行時(shí)建立類型的名稱范圍。

            返回到頂部

            應(yīng)用程序部署和隔離

            哪些選項(xiàng)可用于部署 .NET 應(yīng)用程序?

            .NET 框架通過使應(yīng)用程序的無影響安裝和 XCOPY 部署切實(shí)可行來簡化部署。由于所有請求均首先解析到專用應(yīng)用程序目錄,只需將應(yīng)用程序的目錄文件復(fù)制到磁盤便可運(yùn)行該應(yīng)用程序。不需要任何注冊。

            該方案對 Web 應(yīng)用程序、Web 服務(wù)和獨(dú)立的桌面應(yīng)用程序尤為迫切。然而,在某些情況下,XCOPY 作為分發(fā)機(jī)制是不充分的。應(yīng)用程序只有很少的專用代碼并且依賴于共享程序集的可用性,或者應(yīng)用程序不是在本地安裝的(而是按需下載的)便屬于這種情況。在上述情況下,.NET 框架提供大量的代碼下載服務(wù)以及與 Windows 安裝程序的集成。相對于當(dāng)前平臺,.NET 框架提供的代碼下載支持提供了一些優(yōu)點(diǎn),包括增量下載、代碼訪問安全性(沒有其他 Authenticode 對話框)和應(yīng)用程序隔離(代表一個(gè)應(yīng)用程序下載的代碼不影響其他應(yīng)用程序)。Windows 安裝程序是另一個(gè)可用于 .NET 應(yīng)用程序的功能強(qiáng)大的部署機(jī)制。Windows 安裝程序的所有功能(包括發(fā)布、公布和應(yīng)用程序修復(fù))均適用于 Windows 安裝程序 2.0 中的 .NET 應(yīng)用程序。

            返回到頂部

            我已經(jīng)編寫了要在多個(gè)應(yīng)用程序中使用的程序集。在哪里部署它?

            將要由多個(gè)應(yīng)用程序使用的程序集(如共享程序集)被部署到全局程序集緩存中。在預(yù)發(fā)布版和 Beta 版中,使用 GACUtil SDK 工具的 /i 選項(xiàng)將程序集安裝到緩存中:

            gacutil /i myDll.dll

            Windows Installer 2.0(隨附在 Windows XP 和 Visual Studio .NET 中)能夠?qū)⒊绦蚣惭b到全局程序集緩存。

            返回到頂部

            如何查看全局程序集緩存中安裝的程序集?

            .NET 框架提供了一個(gè)用于查看程序集緩存的 Windows 外殼程序擴(kuò)展。通過 Windows 資源管理器導(dǎo)航至 % windir%\assembly 將激活查看器。

            返回到頂部

            什么是應(yīng)用程序域?

            應(yīng)用程序域(通常為 AppDomain)是一個(gè)用于隔離應(yīng)用程序的虛擬進(jìn)程。在同一應(yīng)用程序范圍內(nèi)(換句話說,以應(yīng)用程序入口點(diǎn)開頭的對象激活序列中的任何位置)創(chuàng)建的所有對象都創(chuàng)建在同一應(yīng)用程序域中。多個(gè)應(yīng)用程序域可以存在于單個(gè)操作系統(tǒng)進(jìn)程中,這使它們成為應(yīng)用程序隔離的輕量方法。

            操作系統(tǒng)進(jìn)程通過提供一個(gè)獨(dú)特的內(nèi)存地址空間來提供隔離。雖然這很有效,但成本很高,而且不能擴(kuò)展到大型 Web 服務(wù)器所需的數(shù)目。另一方面,公共語言運(yùn)行庫通過管理運(yùn)行在應(yīng)用程序域中的代碼的內(nèi)存使用來強(qiáng)制應(yīng)用程序隔離。這可確保它不會(huì)訪問域邊界以外的內(nèi)存。注意只有類型安全代碼才能以這種方式進(jìn)行管理(運(yùn)行庫在不安全代碼加載到應(yīng)用程序域中時(shí)無法保證隔離)很重要。

            返回到頂部

            垃圾回收

            什么是垃圾回收?

            垃圾回收是一種機(jī)制,它使計(jì)算機(jī)能夠檢測到對象何時(shí)不能再被訪問。然后它自動(dòng)釋放該對象所使用的內(nèi)存(同時(shí)調(diào)用由用戶編寫的稱為“終結(jié)程序”的清理例程)。有些垃圾回收器(如 .NET 使用的垃圾回收器)壓縮內(nèi)存,從而減小程序的工作集。

            返回到頂部

            非確定性的垃圾回收如何影響代碼?

            對于大多數(shù)程序員而言,擁有垃圾回收器(并使用垃圾回收對象)意味著即使使用復(fù)雜的數(shù)據(jù)結(jié)構(gòu),也不必?fù)?dān)心釋放內(nèi)存或引用計(jì)數(shù)對象。但是,如果您通常在釋放對象內(nèi)存的同一代碼塊中釋放系統(tǒng)資源(文件句柄、鎖等等),則確實(shí)需要在編碼樣式方面進(jìn)行某些更改。對于垃圾回收對象,應(yīng)提供一種以確定方式(即受程序的控制)釋放系統(tǒng)資源的方法,并使垃圾回收器可以在壓縮工作集時(shí)釋放內(nèi)存。

            返回到頂部

            可以避免使用垃圾回收堆嗎?

            所有面向運(yùn)行庫的語言都允許從垃圾回收堆分配類對象。這帶來了快速分配方面的好處,并且使程序員不必計(jì)算出何時(shí)應(yīng)顯式“釋放”每個(gè)對象。

            CLR 還提供所謂的 ValueType。ValueType 與類相似,不同的是 ValueType 對象在運(yùn)行時(shí)堆棧(而不是堆)上分配,因此當(dāng)代碼退出定義了這些對象的過程時(shí)它們將被自動(dòng)回收。這便是 C# 中“結(jié)構(gòu)”的操作方式。

            C++ 托管擴(kuò)展使您可以選擇分配類對象的位置。如果由 __gc 關(guān)鍵字聲明為托管類,則它們從垃圾回收堆中分配。如果它們不包括 __gc 關(guān)鍵字,則它們的行為和常規(guī) C++ 對象類似,都是從 C++ 堆分配,并且由“free”方法顯式釋放。

            有關(guān)垃圾回收的附加信息,請參閱:

            • 垃圾回收:Microsoft .NET 框架中的自動(dòng)內(nèi)存管理
            • 垃圾回收(第 2 部分):Microsoft .NET 框架中的自動(dòng)內(nèi)存管理

            返回到頂部

            遠(yuǎn)程處理

            進(jìn)程內(nèi)和進(jìn)程間通訊在公共語言運(yùn)行庫中的工作機(jī)制是什么?

            進(jìn)程內(nèi)通訊有兩個(gè)方面:單個(gè)應(yīng)用程序域中的上下文之間的通訊或應(yīng)用程序域之間的通訊。在同一應(yīng)用程序域的上下文之間,代理用作偵聽機(jī)制。不涉及任何封送處理或序列化操作。在跨越多個(gè)應(yīng)用程序域時(shí),我們使用運(yùn)行時(shí)二進(jìn)制協(xié)議進(jìn)行封送處理/序列化。

            進(jìn)程間通訊使用可插接式信道和格式化程序協(xié)議,其中每個(gè)協(xié)議適用于特定的目的。

            • 如果開發(fā)人員使用工具 soapsuds.exe 指定端點(diǎn)以生成元數(shù)據(jù)代理,則默認(rèn)設(shè)置為具有 SOAP 格式化程序的 HTTP 信道。
            • 如果開發(fā)人員在托管環(huán)境中進(jìn)行顯式的遠(yuǎn)程處理,則必須明確要使用的信道和格式化程序。這可以表示為管理形式,通過配置文件,或通過 API 調(diào)用加載特定的信道。選項(xiàng)為:

              具有 SOAP 格式化程序的 HTTP 信道(HTTP 非常適合在 Internet 上使用或者通訊必須經(jīng)過防火墻的情況)

              具有二進(jìn)制格式化程序的 TCP 信道(TCP 是用于局域網(wǎng) (LAN) 的性能更高的選項(xiàng))

            當(dāng)在托管代碼和非托管代碼間進(jìn)行轉(zhuǎn)換時(shí),COM 結(jié)構(gòu)(確切地說是 DCOM)用于遠(yuǎn)程處理。在 CLR 的中間版本中,這通過適用于被服務(wù)的組件(使用 COM+ 服務(wù)的組件)。在最終發(fā)布時(shí),應(yīng)該可以配置任何可遠(yuǎn)程處理的組件。

            對象的分布式垃圾回收由稱為“基于租約的生存期”的系統(tǒng)托管。每個(gè)對象均有一個(gè)租用時(shí)間,當(dāng)時(shí)間過期時(shí),對象會(huì)與 CLR 的遠(yuǎn)程處理結(jié)構(gòu)斷開連接。對象都有默認(rèn)的續(xù)訂時(shí)間,當(dāng)從客戶端成功地調(diào)用了對象時(shí)續(xù)訂該租約。客戶端也可以顯式續(xù)訂租約。

            返回到頂部

            互操作性

            可以在 .NET 框架程序中使用 COM 對象嗎?

            可以。現(xiàn)已部署的任何 COM 組件均可通過托管代碼中使用,通常情況下,改編是完全自動(dòng)的。

            具體說來,自動(dòng)行為是使用運(yùn)行庫可調(diào)用的包裝 (RCW) 從 .NET 框架訪問 COM 組件。該包裝將 COM 組件公開的 COM 接口轉(zhuǎn)換成與 .NET 框架兼容的接口。對于 OLE 自動(dòng)化接口,RCW 可以從類型庫中自動(dòng)生成。而對于非 OLE 自動(dòng)化接口,開發(fā)人員可以編寫自定義 RCW,并將 COM 接口公開的類型手動(dòng)映射至與 .NET 框架兼容的類型。

            返回到頂部

            可以在 COM 程序中使用 .NET 框架組件嗎?

            可以。現(xiàn)已生成的托管類型可通過 COM 訪問,通常情況下,配置是完全自動(dòng)的。托管開發(fā)環(huán)境的某些新功能無法通過 COM 訪問。例如,靜態(tài)方法和參數(shù)化構(gòu)造函數(shù)無法通過 COM 使用。通常情況下,最好提前確定給定類型的預(yù)期用戶。如果要通過 COM 使用類型,則可能只限于使用 COM 可訪問的功能。

            根據(jù)用于編寫托管類型的語言,默認(rèn)情況下,該類型可能是可見的,也可能是不可見的。

            具體說來,自動(dòng)行為是使用 COM 可調(diào)用的包裝 (CCW) 從 COM 訪問 .NET 框架組件。這與 RCW 類似(請參閱前一個(gè)問題),但工作方向相反。此外,如果 .NET 框架開發(fā)工具無法自動(dòng)生成包裝,或者如果自動(dòng)行為不是您所要的,則可以開發(fā)自定義 CCW。

            返回到頂部

            可以在 .NET 框架程序中使用 Win32 API 嗎?

            可以。使用平臺調(diào)用,.NET 框架程序可以通過靜態(tài) DLL 入口點(diǎn)訪問本機(jī)代碼庫。

            下面是一個(gè)調(diào)用 Win32 MessageBox 函數(shù)的 C# 示例:

            using System; 
            using System.Runtime.InteropServices; 
             
            class MainApp 
            { 
                [DllImport("user32.dll", EntryPoint="MessageBox")] 
                public static extern int MessageBox(int hWnd, String strMessage, String strCaption, uint uiType); 
             
                public static void Main() 
                { 
                    MessageBox( 0, "Hello, this is PInvoke in operation!", ".NET", 0 ); 
                } 
            }
            

            返回到頂部

            安全性

            為使代碼適用于安全系統(tǒng),必須做哪些工作?

            這通常不是問題,大多數(shù)應(yīng)用程序?qū)踩\(yùn)行,并且不會(huì)被惡意攻擊所利用。只需使用標(biāo)準(zhǔn)的類庫訪問資源(如文件)或執(zhí)行受保護(hù)的操作(如類型的私有成員反射),安全性便由這些庫得到加強(qiáng)。開發(fā)人員可能需要做的一件簡單的事是包括權(quán)限請求(聲明安全性的形式),以限制代碼可以接收的權(quán)限(限制為它需要的權(quán)限)。這還可確保在允許代碼運(yùn)行的情況下,只有具備了所需的所有權(quán)限才能這樣做。

            只有編寫新基類庫公開新的資源類型的開發(fā)人員才需要直接使用安全系統(tǒng)。不是使所有的代碼都有潛在的安全危險(xiǎn),代碼訪問安全性將危險(xiǎn)限制在顯式重寫安全系統(tǒng)的極少量代碼上。

            返回到頂部

            為什么在從網(wǎng)絡(luò)共享驅(qū)動(dòng)器運(yùn)行代碼時(shí)收到安全性異常?

            默認(rèn)的安全策略只向來自本地 Intranet 區(qū)域的代碼授予一組有限的權(quán)限。該區(qū)域由 Internet Explorer 安全設(shè)置定義,并且應(yīng)配置為與企業(yè)中的本地網(wǎng)絡(luò)匹配。由于由 UNC 或映射驅(qū)動(dòng)器命名(如用 NET USE 命令)的文件通過該本地網(wǎng)絡(luò)發(fā)送,這些文件也在本地 Intranet 區(qū)域中。

            默認(rèn)值是針對不安全 Intranet 的最壞情況設(shè)置的。如果您的 Intranet 比較安全,則可以修改安全策略(用 .NET 框架配置工具或 CASPol 工具),向本地 Intranet 或它的各部分(例如特定的計(jì)算機(jī)共享名稱)授予更多權(quán)限。

            返回到頂部

            如何使代碼在安全系統(tǒng)停止它時(shí)運(yùn)行?

            當(dāng)代碼試圖執(zhí)行無權(quán)執(zhí)行的操作時(shí)會(huì)發(fā)生安全性異常。權(quán)限的授予基于已知的代碼情況,尤其是它的位置。例如,從 Internet 運(yùn)行的代碼比從本地計(jì)算機(jī)運(yùn)行的代碼獲得的權(quán)限少,因?yàn)榻?jīng)驗(yàn)證明前者通常不如后者可靠。因此,為了使因安全性異常而失敗的代碼運(yùn)行,必須增加授予它的權(quán)限。這樣做的一個(gè)簡單方法是將代碼移至更受信任的位置(如本地文件系統(tǒng))。但這并不適用于所有情況(Web 應(yīng)用程序便是一個(gè)很好的例子,公司網(wǎng)絡(luò)上的 Intranet 應(yīng)用程序是另一個(gè)例子)。因此,如果不改變代碼的位置,還可以更改安全策略,向該位置授予更多權(quán)限。使用 .NET 框架配置工具或代碼訪問安全策略實(shí)用工具(caspol.exe)都可以做到這一點(diǎn)。如果您是代碼開發(fā)人員或發(fā)布者,則還可以為代碼加上數(shù)字簽名,然后修改安全策略,向帶該簽名的代碼授予更多權(quán)限。但是,在采用上述任何操作時(shí),請記住給代碼授予的權(quán)限要少些,這是因?yàn)樗皇莵碜钥勺R別的可靠源。在將代碼移至本地計(jì)算機(jī)或更改安全策略前,應(yīng)確保信任代碼不會(huì)執(zhí)行惡意的或損害性操作。

            返回到頂部

            如何管理個(gè)人計(jì)算機(jī)的安全性?如何管理企業(yè)計(jì)算機(jī)的安全性?

            .NET 框架包括 .NET 框架配置工具——MMC 管理單元(mscorcfg.msc)以配置包括安全策略在內(nèi)的 CLR 的若干方面。該管理單元不僅支持在本地計(jì)算機(jī)上管理安全策略,而且還創(chuàng)建與系統(tǒng)管理服務(wù)器和組策略兼容的企業(yè)策略部署包。命令行實(shí)用工具 CASPol.exe 也可用于計(jì)算機(jī)上的腳本策略更改。為了在命令提示中運(yùn)行任一種工具,請將當(dāng)前目錄更改為 .NET 框架的安裝目錄(位于 %windir%\Microsoft.Net\Framework\v1.0.2914.16\)并鍵入 mscorcfg.msc 或 caspol.exe。

            返回到頂部

            基于證據(jù)的安全性如何與 Windows 2000 安全性一起使用?

            基于證據(jù)的安全性(它授權(quán)代碼)與 Windows 2000 安全性(它基于登錄標(biāo)識)一起使用。例如,為訪問文件,托管代碼必須既有代碼訪問安全性文件權(quán)限,還必須在具有 NTFS 文件訪問權(quán)的登錄標(biāo)識下運(yùn)行。.NET 框架中包含的托管庫還為基于角色的安全性提供了類。這些類使應(yīng)用程序可以使用 Windows 登錄標(biāo)識和用戶組。

            返回到頂部

            posted on 2006-01-05 09:34 夢在天涯 閱讀(633) 評論(0)  編輯 收藏 引用 所屬分類: C#/.NET

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計(jì)

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804159
            • 排名 - 5

            最新評論

            閱讀排行榜

            香蕉久久一区二区不卡无毒影院| 久久午夜福利电影| 日韩精品久久久久久| 久久夜色撩人精品国产| 无码人妻精品一区二区三区久久久 | 色综合久久无码五十路人妻| 色综合久久久久网| 亚洲精品无码成人片久久| 国产精品成人无码久久久久久 | 久久免费99精品国产自在现线| 久久只这里是精品66| 91精品无码久久久久久五月天| 99久久99久久精品国产片果冻| 国产精品激情综合久久| 中文字幕久久久久人妻| 无码任你躁久久久久久| 国产精品成人99久久久久91gav| 久久久久久久97| 亚洲精品tv久久久久久久久| 久久精品亚洲福利| 久久综合狠狠色综合伊人| 久久无码人妻一区二区三区午夜| 麻豆久久久9性大片| 无码精品久久一区二区三区| 国产呻吟久久久久久久92| 2020久久精品国产免费| 久久99精品久久久久子伦| 色妞色综合久久夜夜| 中文无码久久精品| 久久亚洲精品成人无码网站| 欧美日韩精品久久免费| 久久精品桃花综合| 久久久久亚洲AV成人网人人网站| 久久久久久亚洲精品无码| 久久久久亚洲精品天堂久久久久久 | 久久久无码精品亚洲日韩软件| a级毛片无码兔费真人久久| 亚洲国产精品婷婷久久| 国产精品一区二区久久精品无码 | 国产精品免费看久久久香蕉| 久久国产精品波多野结衣AV|