通過託管**來管理
clr的
方式,稱為託管宿主。想實現託管宿主很簡單,只要實現
類就可以了。
類的定義如**清單
1-1所示。
**清單
類定義[comvisibleattribute(true)]
[securitypermissionattribute(securityaction.linkdemand, flags = securitypermissionflag.infrastructure)]
[securitypermissionattribute(securityaction.inheritancedemand, flags = securitypermissionflag.infrastructure)]
public
要實現自己的託管宿主需要實現乙個
類的子類,重寫其中的虛方法。**清單1-
2自定義
類來實現簡單的託管宿主。
**清單1-
2自定義
類namespace
託管宿主
public override hostsecuritymanager
hostsecuritymanager
}public override assemblyentryassembly}}
}現在通過**清單
3-14
建立的宿主應用程式能夠參與新應用程式域的建立。
在**中宣告了兩個許可權,重寫了兩個屬性,在實際的編碼中可以按照這樣的簡單模式進行擴充套件,真正的參與
clr的
管理。編寫託管宿主之後,如何讓它發揮作用呢?一般情況有三種選擇:
關於非託管
api在
clr寄宿一節進行了詳細的介紹,但是在討論
clr寄宿的時候只討論了完全採用非託管
api實現的非託管宿主實施的寄宿。那麼想要通過非託管
api來使託管宿主發揮作用的話,必須在非託管
api啟動
clr之後把控制權轉交給我們的託管宿主。
宿主在呼叫
corbindtoruntimeex
之後,將請求指向
icorruntimehost
的介面指標,利用該指標轉向到託管宿主。在和
環境變數中標識替代的
的程式集和型別。該程式集必須完全受信任,並且包含在起始應用程式的全域性程式集快取或目錄中。環境變數中的型別和程式集名稱必須是完全限定的。例如:
注意只有被授予
fulltrust 的
程式集(如全域性程式集快取中的程式集或者在
strongname>
()) 方法中標識為
fulltrustassemblies
的程式集)才可以在
建構函式和
initializenewdomain
方法中載入。
在啟動clr
之前,hkey_local_machine(or hkey_current_user)\software\microsoft\.netframework\
鍵值必須設定兩個值,乙個是
,另乙個是
。必須是安裝到全域性程式集快取的程式集,
是自定義的託管宿主的類。
--------------------------------注:本文部分內容改編自《.net 安全揭秘》
CLR寄宿 中 託管exe檔案的載入和執行
託管exe 檔案的載入和執行過程在之前的文章 做過簡要的介紹,現在結合本章的內容進行詳細的分析。託管exe檔案被啟動的時候,首先被 pe loader 載入。pe loader 載入exe 檔案之後,會分析 pe檔案頭的 data directory table 如果clr header 內的值不為...
CLR寄宿 中 託管exe檔案的載入和執行
託管exe 檔案的載入和執行過程在之前的文章 做過簡要的介紹,現在結合本章的內容進行詳細的分析。託管exe 檔案被啟動的時候,首先被 pe loader 載入。pe loader 載入exe 檔案之後,會分析 pe檔案頭的 data directory table 如果clr header 內的值不...
框架設計 CLR寄宿和應用程式域
概述 認識什麼是clr寄宿和應用程式域?clr寄宿 允許任何應用程式域使用clr的特徵。允許已有的應用程式至少區域性使用託管 程式設計,並為應用程式提供通過程式設計支援自定義和可擴充套件性的能力。應用程式域 允許第三方信任的 在已存在的程序中執行,並保證應用程式的資料結構,以及安全上下文不被利用或不...