Microsoft .NET 框架常見問題

Microsoft .NET 框架常見問題

Microsoft Corporation

2000 年 12 月

摘要:本文包含有關 Microsoft .NET 和 Microsoft .NET 框架的常見問題。

目錄

概念問題
運行時技術問題
   術語
   程序集
   應用程序部署及隔離
   垃圾回收
   遠程處理
   互操作性
   安全性

概念問題

運行時技術問題

術語

程序集

應用程序部署和隔離

垃圾回收

遠程處理

互操作性

安全性

概念問題

什麼是 .NET?

簡單地說,Microsoft® .NET 是 Microsoft 以服務的方式遞交軟件的一種策略。有關完整信息,請參閱有關該主題的白皮書(英文)。

以下是白皮書的摘要,簡要介紹了 .NET 的關鍵內容:

  • Microsoft .NET 平臺
    包括用於創建和操作新一代服務的 .NET 基礎結構和工具、用於實施多信息客戶端的 .NET 用戶經驗,以及用於啓用新一代智能 Internet 設備的 .NET 構造塊服務和 .NET 設備軟件。

  • Microsoft .NET 產品和服務
    包括 Microsoft® Windows.NET(其核心集成了一組構造塊服務)、MSN.NET、個人訂閱服務、Microsoft® Office.NET、Microsoft® Visual Studio.NET 和 Microsoft® bCentral™ for .NET。

  • 第三方 .NET 服務
    許多領域的合作伙伴和開發人員都有機會在 .NET 平臺上提供企業和垂直服務。

此問題針對的是 .NET 框架。.NET 框架是 .NET 平臺基礎結構的一部分。有關 .NET 框架的詳細信息,請參閱下一個問題。

返回頁首

什麼是 .NET 框架?

.NET 框架是創建、部署和運行 Web 服務及其他應用程序的一個環境。它包括三個主要部分:公共語言運行時、框架類和 ASP.NET。

返回頁首

.NET 框架是否只適用於創建 Web 站點的用戶?

.NET 框架使您可以創建優秀的 Web 應用程序。但它也可以幫助您創建現在的各種應用程序。與當前創建應用程序的方式相比,.NET 在編寫任何 Windows 軟件(使用 ATL/COM、MFC、Microsoft® Visual Basic® 或標準 Microsoft® Win32®)方面都具有更大的優勢。當然,如果您是開發 Web 站點,那麼從 ASP.NET 開始,您就會感受到 .NET 框架的強大吸引力。

返回頁首

從何處可以獲得 .NET 框架 SDK?

現在可以從 MSDN Online Downloads(英文)下載 .NET 框架 SDK 的 Beta 1 版。鑑於其大小,我們以多種方式提供此 Beta 版:作爲一個下載文件 (106 MB),分爲 11 部分下載,或者從 Microsoft Developer Store 定購其 CD:

返回頁首

.NET 框架可以運行於哪些平臺?

Beta 1 版可以運行在 Microsoft® Windows® 2000、Windows 95/98/ME 和 Windows NT® 4.0 上。

另外,還有一個稱爲 .NET 精簡框架的 .NET 框架版本。它用於使蜂窩電話和增強型電視等設備也具有 .NET 框架的某些功能。.NET 精簡框架將運行在 Windows CE 和其他嵌入式操作系統上。

返回頁首

.NET 框架支持哪些編程語言?

.NET 框架與編程語言無關。事實上任何語言都可以支持 .NET 框架。目前,您可以用許多語言來創建 .NET 程序,包括:C++、Microsoft® Visual Basic.NET、JScript® 和 Microsoft 的最新語言——C#。以後,也會有大量的第三方語言可以用來創建 .NET 框架應用程序,包括 COBOL、Eiffel、Perl、Python、Smalltalk 等等。

返回頁首

.NET 框架和 COM+ 服務之間是什麼關係?

在 .NET 框架中,不僅可以完全訪問 COM+ 服務,而且也更容易創建服務組件。

.NET 框架組件可被添加至 COM+ 應用程序中。在 COM+ 應用程序中,.NET 框架組件可以利用自動組件服務,例如:事務、對象池、排隊組件、事件等等。

返回頁首

.NET 框架和 DCOM 之間是什麼關係?

DCOM 是用於進程間通訊的 COM 基礎結構。.NET 框架支持大量用於進程間通訊的可插入通道和格式化程序。在託管代碼和非託管代碼之間進行轉換時,.NET 框架使用了 COM 基礎結構,尤其是 DCOM。所有使用 COM+ 服務的方案都使用了託管到非託管轉換,因此默認使用 DCOM。對於注重互操作性的進程間通訊,.NET 框架也支持 SOAP(簡單對象訪問協議)。

返回頁首

.NET 框架是否僅僅是 Windows DNA 的新名稱?

不。Windows DNA 是用於創建緊耦合的分佈式 Web 應用程序的一種體系結構。由於分佈式應用程序變得需要更多的鬆耦合原理,因此 Microsoft 在 .NET 中發展了該體系結構。.NET 框架是 .NET 體系結構的一部分。

返回頁首

運行時技術問題

術語

什麼是公共語言運行時 (CLR)?

公共語言運行時是 .NET 框架應用程序的執行引擎。

它提供許多服務,包括:

  • 代碼管理(加載和執行)

  • 應用程序內存隔離

  • 類型安全驗證

  • IL 到本機代碼的轉換

  • 元數據(增強的類型信息)訪問

  • 爲託管對象管理內存

  • 強制代碼訪問安全

  • 異常處理,包括跨語言異常

  • 託管代碼、COM 對象和現有 DLL(非託管代碼和數據)之間的互操作

  • 自動進行對象佈局

  • 對開發人員服務(配置、調試等)的支持

返回頁首

什麼是公共類型系統 (CTS)?

公共類型系統是多信息類型系統,它被內置在公共語言運行時中,支持大多數編程語言中的類型和操作。公共類型系統支持大量編程語言的完全實現。

返回頁首

什麼是公共語言規範 (CLS)?

公共語言規範是一組結構和限制,用作庫編寫者和編譯器編寫者的指南。它使任何支持 CLS 的語言都可以完全使用庫,並且使這些語言可以相互集成。公共語言規範是公共類型系統的子集。對於那些需要編寫代碼供其他開發人員使用的應用程序開發人員,公共語言規範也非常重要。如果開發人員遵循 CLS 規則來設計公共訪問的 API,那麼就可以在支持公共語言運行時的任何其他編程語言中很容易地使用這些 API。

返回頁首

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

MSIL 是與 CPU 無關的指令集。.NET 框架程序被編譯成 MSIL。它包含加載、存儲、初始化和調用對象方法的指令。

與元數據和公共類型系統結合,MSIL 允許真正的跨語言集成。

MSIL 在執行前被轉換爲機器代碼,而不是一邊解釋一邊執行。

返回頁首

什麼是託管代碼和託管數據?

託管代碼是編寫爲支持公共語言運行時服務的代碼(請參閱“什麼是公共語言運行時?”)。爲了支持這些服務,代碼必須向運行時提供最小級別的信息(元數據)。默認情況下,所有 C#、Visual Basic.NET 和 JScript.NET 代碼都是託管代碼。Visual Studio.NET C++ 代碼在默認情況下不是託管代碼,但通過指定命令行開關 (/CLR),編譯器也可以生成託管代碼。

與託管代碼密切相關的是託管數據。託管數據是由公共語言運行時的垃圾回收器進行分配和釋放的數據。默認情況下,C#、Visual Basic 和 JScript.NET 數據是託管數據。不過,通過使用特殊的關鍵字,C# 數據可以被標記爲非託管數據。Visual Studio.NET C++ 數據在默認情況下是非託管數據(即使在使用 /CLR 開關時),但是在使用 C++ 的託管擴展時,可以使用“__gc”關鍵字將類標記爲託管類。就象該名稱所顯示的那樣,它表示類實例的內存由垃圾回收器管理。另外,該類也完全成爲 .NET 框架的成員,同時具備它所帶來的好處和限制。好處的一個例子是:它可以與其他語言編寫的類正確地進行互操作(如託管的 C++ 類可以從 Visual Basic 類繼承);限制的一個例子是:託管類只能從一個基類繼承。

返回頁首

程序集

什麼是程序集?

程序集是 .NET 框架應用程序的主要構造塊。它是作爲一個單一實現單元(包含一個或多個文件)來創建、標識和部署的功能集合。所有的託管類型和資源都可以被標記爲僅在其實現單元內訪問,或者標記爲可由該單元以外的代碼來訪問。

程序集通過清單來進行自我說明。清單是每個程序集的不可或缺的組成部分。清單:

  • 建立程序集標識(以文本名稱的格式)、版本、類別和數字簽名(如果要在應用程序之間共享該程序集)。

  • 定義組成程序集實現的文件(通過名稱和文件散列)。

  • 指定組成程序集的類型和資源,包括哪些是從程序集中導出的。

  • 逐條記錄編譯時對其他程序集的依存。

  • 指定程序集正確運行所需要的權限的集合。

此信息在運行時用於解析引用、強制版本綁定策略以及驗證所加載的程序集的完整性。因爲每一類型都被加載到程序集的上下文中,所以運行時可以確定並定位任何正在運行的對象的程序集。程序集也是應用了代碼訪問安全權限的單元。在確定授予其所包含的代碼哪些權限時,每個程序集的標識證據都被認爲是獨立的。

程序集的自我說明特徵也有助於實現無影響安裝和 XCOPY 部署。

返回頁首

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

專用程序集僅由單一應用程序使用,並且存儲在該應用程序的安裝目錄中(或其子目錄中)。共享程序集是可被多個應用程序引用的程序集。要共享一個程序集,該程序集必須明確爲這個目的而創建,這可以通過給其指定加密的增強型名稱(用作共享名稱)來實現。相反,專用程序集名稱只要求在使用它的應用程序中是唯一的。

通過區分專用和共享程序集,我們介紹明確決定共享的要點。只需簡單地將專用程序集部署在應用程序目錄中,即可確保應用程序只在創建和部署它的那部分中運行。對專用程序集的引用只在專用應用程序目錄內部進行解析。

選擇創建和使用共享程序集可以有多種原因,例如表達版本策略的能力。共享程序集具有加密的增強型名稱,這項事實意味着只有程序集的作者才擁有密鑰來生成程序集的新版本。因此,如果您做出策略聲明,希望接受程序集的新版本,則您可以確信版本更新將由作者來控制和驗證。否則,您就不會接受它們。

對於在本地安裝的應用程序,共享程序集通常被明確安裝在全局程序集緩存中(程序集的本地緩存由 .NET 框架維護)。.NET 框架的版本管理特性的關鍵在於下載的代碼不會影響本地安裝的應用程序的執行。下載的代碼被放在一個特殊的下載緩存中,即使某些下載組件被編譯爲共享程序集,也不能在機器上全局使用這些代碼。

與 .NET 框架一起發佈的類都被編譯爲共享程序集。

返回頁首

如果我想創建一個共享程序集,在標記和管理密鑰對方面是否需要額外的開銷?

創建共享程序集確實涉及到加密密鑰方面的工作。創建程序集時,只有公共密鑰是必要的。支持 .NET 框架的編譯器提供命令行選項(或使用自定義屬性),用於在創建程序集時提供公共密鑰。通常在資源數據庫中保留一份常用的公共密鑰,並使編譯腳本指向此密鑰。在發佈程序集之前,必須使用相應的私人密鑰將其完全標記。這是通過 SDK 工具 SN.exe(增強型名稱)來完成的。

增強型名稱標記不象 Authenticode 一樣需要使用證書。它不涉及第三方組織,不需要付費,也不受證書約束。另外,驗證增強型名稱的額外開銷遠遠小於驗證 Authenticode 的開銷。不過,增強型名稱不會生成任何信任某個出版商的語句。增強型名稱使您可以確信給定程序集的內容沒有被篡改,在運行時爲您加載的程序集來自於您開發時針對的出版商。但它不會生成有關是否信任出版商身份的語句。

返回頁首

名稱空間與程序集名稱之間有什麼區別?

名稱空間是類型的一種邏輯命名方案,其中簡單類型名稱(如 MyType)前面帶有用點分隔的層次結構名稱。這樣的命名方案完全在開發人員的控制之下。例如,鍵入 MyCompany.FileAccess.A 和 MyCompany.FileAccess.B 在邏輯上將會具有與文件訪問相關的功能。.NET 框架使用一種層次結構命名方案,用於將類型按相關功能的邏輯類別進行分組,例如,ASP.NET 應用程序框架或遠程處理功能。設計工具可以利用名稱空間使開發人員更容易在代碼中瀏覽和引用類型。名稱空間的概念與程序集的概念之間沒有任何聯繫。一個程序集可以包含其層次結構名稱具有不同名稱空間根的類型,而一個邏輯名稱空間根可以跨越多個程序集。在 .NET 框架中,名稱空間是在設計時進行邏輯命名的便捷方式,而程序集在運行時爲類型建立名稱作用域。

返回頁首

應用程序部署和隔離

部署 .NET 應用程序時可以使用哪些選項?

通過使應用程序的無影響安裝和 XCOPY 部署成爲可能,.NET 框架簡化了部署。因爲所有的請求首先在專用應用程序目錄中進行解析,所以只需簡單地將一個應用程序的目錄文件複製到磁盤中,即可運行該應用程序,而不需要註冊。

此方案對於 Web 應用程序、Web 服務和獨立的桌面應用程序特別有吸引力。不過,在有些方案中 XCOPY 還不足以擔當分發機制。例如,當應用程序具有很少的專用代碼,而依賴於可用的共享程序集;或者應用程序不是安裝在本地(而是按需下載)。對於這些情況,.NET 框架提供了擴展的代碼下載服務以及與 Windows Installer 的集成。.NET 框架提供的代碼下載支持通過當前平臺提供了許多優勢,包括增量下載、代碼訪問安全性(不再有“Authenticode”對話框)和應用程序隔離(爲一個應用程序下載的代碼不會影響其他應用程序)。Windows Installer 是 .NET 應用程序可以使用的另外一個強大的部署機制。在 Windows Installer 1.5 中,Windows Installer 的所有特性(包括髮行、公佈和應用程序修補)都可以在 .NET 應用程序中使用。

返回頁首

如果我已經編寫了一個程序集,並希望在多個應用程序中使用它,我應該在何處部署它?

要由多個應用程序使用的程序集(如共享程序集)需要部署到全局程序集緩存中。在預發佈版和 Beta 版中,使用 Alink SDK 工具的 /i 選項可將程序集安裝到緩存中:

al /i:myDll.dll

Windows Installer 的後續版本能夠將程序集安裝到全局程序集緩存中。

返回頁首

如何才能看到在全局程序集緩存中安裝了哪些程序集?

.NET 框架附帶了一個 Windows 外殼擴展,用於查看程序集緩存。在 Windows 資源管理器中,轉至 % windir%/assembly 以激活查看器。

返回頁首

什麼是應用程序域?

應用程序域(通常是 AppDomain)是用於隔離應用程序的虛擬進程。在同一個應用程序作用域中創建的所有對象(換句話說,從該應用程序的入口點開始沿着對象激活序列的任何地方)都在同一個應用程序域中創建。多個應用程序域可以存在於一個操作系統進程中,使它們成爲隔離應用程序的簡便方式。

操作系統進程通過使用各不相同的內存地址空間來提供隔離。儘管它是有效的,但也是代價昂貴的,並且不能達到大型 Web 服務器所需要的數量。與其相比,公共語言運行時通過管理在應用程序域中運行的代碼的內存使用來強制進行應用程序隔離。這樣就確保它不會訪問應用程序域以外的內存。需要注意的是,只有類型安全的代碼才能以這種方式管理(當在應用程序域中加載不安全代碼時,運行時不能保證隔離)。

返回頁首

垃圾回收

什麼是垃圾回收?

垃圾回收是使計算機能檢測何時不再能夠訪問某個對象的一種機制。它將自動釋放由該對象使用的內存(也調用用戶編寫的稱爲“結束者”的清理例程)。一些垃圾回收器(如由 .NET 使用的)會壓縮內存,並因此減少程序的工作集。

返回頁首

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

對於大多數編程人員而言,擁有一個垃圾回收器(並且使用可作爲垃圾回收的對象)意味着永遠不需要操心釋放內存或引用計數對象,即使您使用了複雜的數據結構。但如果您通常在同一個用於釋放對象內存的代碼塊中釋放系統資源(文件句柄、鎖定等等),那麼在編碼樣式方面需要做一些修改。使用可作爲垃圾回收的對象時,您應該提供一種方法,來明確釋放系統資源(也就是說,由您的程序控制),同時允許垃圾回收器在壓縮工作集時釋放內存。

返回頁首

是否能夠避免使用可作爲垃圾回收的堆?

所有支持運行時的語言都允許您從可作爲垃圾回收的堆中分配類對象。這在快速分配方面帶來了好處,並且使編程人員無需自己來計算何時應該顯式“free”每個對象。

CLR 還提供了 ValueTypes 對象——它們與類相似,但 ValueType 對象是在運行時堆棧(不是堆)中分配的,因此當您的代碼退出定義這些對象的過程時,將自動回收它們。這就是 C# 中“struct”的操作方式。

C++ 的託管擴展使您可以選擇類對象分配的位置。如果使用 __gc 關鍵字聲明爲託管類,它們將從可作爲垃圾回收的堆中分配;如果它們不包含 __gc 關鍵字,它們將與普通的 C++ 對象一樣從 C++ 堆中分配,並且使用“free”方法顯式釋放。

有關垃圾回收的的詳細信息,請參閱:

返回頁首

遠程處理

如何在公共語言運行時中進行進程內和進程間通訊?

進程內通訊有兩種:在單一應用程序域的上下文中,或者跨應用程序域。在同一個應用程序域的上下文中,使用代理作爲監聽機制,而不涉及封送處理/序列化。當跨應用程序域時,使用運行時二進制協議來作封送處理/序列化。

進程間通訊爲每個特定目的使用一個可插入通道和格式化程序協議。

  • 如果開發人員使用 soapsuds.exe 工具指定終結點來生成元數據代理,那麼默認值是帶有 SOAP 格式化程序的 HTTP 通道。

  • 如果開發人員在託管世界中執行顯式遠程處理,需要明確指定使用的通道和格式化程序。這可以通過配置文件用可管理的方式來表示,或者用 API 調用來加載特定通道。選項如下:

    帶有 SOAP 格式化程序的 HTTP 通道(HTTP 在 Internet 上或任何必須通過防火牆進行通信的時候運行良好)

    帶有二進制格式化程序的 TCP 通道(對於局域網,TCP 是性能較高的選項)

    帶有 SOAP 格式化程序的 SMTP 通道(僅對跨計算機有意義)

在託管代碼和非託管代碼之間進行轉換時,COM 基礎結構(尤其是 DCOM)用於遠程處理。在 CLR 的中間版本中,這也適用於服務組件(使用 COM+ 服務的組件)。在最終版本中,配置任何遠程組件都是可能的。

對象的分佈式垃圾回收由名爲“租用生存期”的系統來管理。每個對象都有一個租用時間,當到期時,該對象與 CLR 的遠程處理基礎結構斷開連接。對象具有一個默認的更新時間——當客戶端成功地調用了對象時,租用將被更新。客戶端可以顯式更新租用。

返回頁首

互操作性

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

是。您現在部署的任何 COM 組件都可以在託管代碼中使用。通常情況下,所需的調整是完全自動進行的。

特別是,可以使用運行時可調用包裝 (RCW) 從 .NET 框架訪問 COM 組件。此包裝將 COM 組件提供的 COM 接口轉換爲與 .NET 框架兼容的接口。對於 OLE 自動化接口,RCW 可以從類型庫中自動生成;對於非 OLE 自動化接口,開發人員可以編寫自定義 RCW,手動將 COM 接口提供的類型映射爲與 .NET 框架兼容的類型。

返回頁首

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

是。您現在創建的託管類型都可以通過 COM 訪問。通常情況下,所需的配置是完全自動進行的。託管開發環境的某些新特性不能在 COM 中訪問。例如,不能在 COM 中使用靜態方法和參數化構造函數。一般,提前確定給定類型所針對的用戶是一種較好的辦法。如果類型需要在 COM 中使用,您將被限制在使用 COM 可訪問的特性。

默認情況下,託管類型可能是可見的,也可能是不可見的,這由用於編寫託管類型的語言決定。

特別是,可以使用 COM 可調用包裝 (CCW) 從 COM 訪問 .NET 框架組件。這與 RCW(請參閱上一個問題)相似,但它們的方向相反。同樣,如果 .NET 框架開發工具不能自動生成包裝,或者如果自動方式不是您所需要的,則可以開發自定義的 CCW。

返回頁首

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

是。使用 P/Invoke,.NET 框架程序可以通過靜態 DLL 入口點的方式來訪問本機代碼庫。

下面是 C# 調用 Win32 MessageBox 函數的示例:

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, "您好,這是 PInvoke!", ".NET", 0 ); } }

返回頁首

安全性

如何使代碼與安全系統協調工作?

通常,這不成問題——大多數應用程序能安全地運行,不會受惡意攻擊的干擾。通過簡單地使用標準類庫來訪問資源(如文件)或執行受保護的操作(例如反轉類型的私有成員),安全性由這些庫來實施。應用程序開發者需要完成的一項簡單工作是包括權限請求(一種公開的安全性),將代碼可能接收的權限限制在它所需要的權限範圍內。這也確保瞭如果代碼被允許運行,它在運行時將具有所需的所有權限。

僅當開發人員需要編寫提供新型資源的新基類庫時,他們才需要直接處理安全系統。在這種情況下,並非所有的代碼都有潛在的安全性問題,代碼訪問安全機制將其限制在替代了安全系統的那部分代碼上。

返回頁首

爲什麼在網絡共享驅動器中運行代碼時會發生安全異常?

默認安全策略僅給來自本地 Intranet 區域的代碼授予有限的權限。這個區域是由 Internet Explorer 安全設置定義的,它們應該配置爲與企業內部的本地網絡相匹配。由於由 UNC 或映射驅動器(例如使用 NET USE 命令)命名的文件都需要在本地網絡上發送,因此它們也在本地 Intranet 區域中。

默認值是爲不安全的 Intranet 這種最壞情況而設置的。如果您的 Intranet 比較安全,您可以修改安全策略(用 CASPol 工具),給本地 Intranet 或其一部分(例如特定的計算機共享名)授予更多的權限。

返回頁首

如何編寫代碼,使它在安全系統停止該代碼時運行?

當代碼試圖執行未經授權的操作時,將發生安全異常。權限是基於代碼(尤其是其位置)來授予的。例如,從 Internet 中運行的代碼所得到的權限比在本地計算機上運行的代碼所得到的權限要少,這是因爲經驗證明,它的可靠性要低一些。因此,要運行由於安全異常而失敗的代碼,您必須增加授予它的權限。一個簡單的方法是將代碼移到更受信任的位置(例如本地文件系統)。但這種方法並不是在任何情況下都有效(Web 應用程序是一個很好的例子,企業網絡上的 Intranet 應用程序是另一個例子)。因此,不要改變代碼位置,而是通過更改安全策略給該位置授予更多的權限。請使用代碼訪問安全策略工具 (caspol.exe) 或圖形化管理工具(在 Beta 2 和更高版本中可以得到)來執行此操作。如果您是代碼的開發人員或發行者,您也可以對它進行數字簽名,然後修改安全策略,給帶有該數字簽名的代碼授予更多權限。但是,在執行上述任何操作時,請記住此代碼被授予較少的權限,是因爲它不是來自受信任的來源——在將代碼移至本地計算機或更改安全策略以前,您應該確保這些代碼不會執行惡意或損壞性的操作。

返回頁首

如何管理個人或企業計算機的安全性?

目前,CASPol 命令行工具是管理安全性的唯一方法。安全策略由兩個級別組成:按計算機和按用戶。我們計劃在 .NET 框架第一版中提供全面的管理工具以及企業策略管理支持。

返回頁首

基於證據的安全性是如何與 Windows 2000 安全性配合工作的?

基於證據的安全性(基於授權碼)能與 Windows 2000 安全性(基於登錄身份標識)配合工作。例如,要訪問一個文件,託管代碼必須具有代碼訪問安全文件權限,也必須在具有 NTFS 文件訪問權限的登錄身份標識下運行。.NET 框架中包括的託管庫也爲基於角色的安全性提供了類。這些都使應用程序能夠與 Windows 登錄身份標識及用戶組配合工作。



發佈了66 篇原創文章 · 獲贊 0 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章