国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.NET對(duì)軟件安裝的沖擊

2024-07-10 12:59:19
字體:
供稿:網(wǎng)友


.net對(duì)軟件安裝的沖擊

什么是.net?

.net是如何改變整個(gè)軟件安裝的?
.net改變了我們進(jìn)行軟件安裝的許多方式。最明顯的,我們有了新的語言c#。還有,操作系統(tǒng)也發(fā)生了微妙的變化,以及它處理共享代碼的方式。

關(guān)于元數(shù)據(jù)(metadata)
首先,你必須了解什么是managed code?所有基于微軟中間語言(msil)的代碼都是以managed code運(yùn)行的。比如.net推出的新語言c#就完全是以managed code運(yùn)行的。而其他visual studio .net附帶的語言,比如visual c++,允許managed code 和none-managed code 混合使用。
那么managed code 有什么特點(diǎn)呢?它與none-managed code 的最大區(qū)別就是包含了元數(shù)據(jù)(metadata)。元數(shù)據(jù)描述了代碼里的每一個(gè)元素,允許.net的運(yùn)行庫對(duì)其進(jìn)行管理,并使得代碼可以自描述(self-describing)。.net運(yùn)行庫通過使用元數(shù)據(jù)來提供諸如內(nèi)存管理、跨語言集成、代碼安全和對(duì)象生命周期自動(dòng)控制等等服務(wù)。簡(jiǎn)單的說,managed code就是可以與.net運(yùn)行庫以“契約合作”的方式運(yùn)行的代碼。
元數(shù)據(jù)可以包括assemblies、可裝載文件、類型、方法等等。與制作安裝關(guān)系最為密切的就是assembly manifest了。assembly是一個(gè)程序的主要組成部分,包括了所有的功能、版本信息,并作為一個(gè)整體進(jìn)行發(fā)布。每一個(gè)assembly都要包括一個(gè)assembly manifest,并使得assembly 可以自描述。manifest包括:

以文本表示的assembly 標(biāo)識(shí)、版本等,如果要與別程序共享,還要包括數(shù)字簽名。
描述包括的文件
指定assembly的類型和資源,并指明該assembly輸出哪些。
列舉所有依賴的assembly。
指明運(yùn)行需要的許可權(quán)限
manifest里也包括了以前是由自注冊(cè)(self-registration)來完成的數(shù)據(jù)。比如所有的類型信息存放在manifest里,這些manifest數(shù)據(jù)又都放在.dll或.exe文件里。這樣通過manifest我們就可以很容易的知道m(xù)anaged code 的相互依賴關(guān)系,而不會(huì)漏掉任何信息。但是,如果是managed code 和none-managed code的混合情況,就不是那么容易做到了。
如果沒有一種新的安裝技術(shù)出現(xiàn),開發(fā)者將面臨一個(gè)大難題。

對(duì)自安裝(self-installing)代碼的誤解
其中一個(gè)就是,使用managed code編寫的軟件不需要安裝。因?yàn)橐恍┌惭b的任務(wù)已經(jīng)由元數(shù)據(jù)完成了,比如com組件的注冊(cè)。只要把程序的所有文件拷貝到一個(gè)目錄下面,就可以直接運(yùn)行了。很遺憾,這并不是軟件安裝的全部過程。
軟件安裝并不是簡(jiǎn)單的把文件從位置a拷貝到位置b。軟件安裝程序應(yīng)該是給用戶提供一個(gè)友好的、可靠的和統(tǒng)一的方式,把軟件安裝到用戶的機(jī)器上面。首先,安裝程序需要通過一個(gè)統(tǒng)一的熟悉的用戶界面,讓用戶選擇安裝的選項(xiàng),然后創(chuàng)建文件夾、快捷方式,進(jìn)行升級(jí)、網(wǎng)絡(luò)安裝,還有許可證管理等等。在上面的例子里,你無法為用戶完成所有這些事情,更不用說許可證管理了。
另外,managed code 和none-managed code混合的應(yīng)用程序也不能自安裝。而且,要安裝這樣的程序比安裝純粹的none-managed code 還要麻煩。我們不可能一下子全部丟掉以前的代碼,全部轉(zhuǎn)成managed code 。所以,我們不得不認(rèn)真的考慮這個(gè)問題。

isolated applications and side-by-side components
在windows xp和.net平臺(tái)里,微軟提供了一套機(jī)制來減少dll hell的發(fā)生。我們知道,應(yīng)用程序一般都依賴于一些共享資源,所謂共享,就是說如果已經(jīng)有一個(gè)資源安裝在了系統(tǒng)上,應(yīng)用程序就不再需要安裝該資源了,直接使用就可以了。于是dll hell就這樣發(fā)生了,如果一個(gè)應(yīng)用程序需要一個(gè)比系統(tǒng)上現(xiàn)有的共享資源版本更高的資源,于是它以新的高版本的資源代替了老版本。而且有這樣的可能,新版本的資源并不能與老版本的資源相兼容。而系統(tǒng)中只能存在該資源的一個(gè)版本,所以依賴于老版本資源的應(yīng)用程序?qū)⒈罎ⅲ?br>
為了解決這個(gè)問題,微軟提供了兩種方法:isolated applications 和side-by-side components。
isolated application 就是讓應(yīng)用程序在發(fā)布的時(shí)候,附帶了該程序所有組件的隔離版本(isolated version),這樣就不會(huì)受其他安裝程序影響了。但是這需要完全重寫代碼,代價(jià)太高。
side-by-side組件就是可以在新舊版本的共享資源一起共存的環(huán)境中運(yùn)行。windows xp中的許多共享資源就是以side-by-side的方式來編寫的。開發(fā)者可以通過使用編寫application manifest來達(dá)到side-by-side 的好處。application manifest描述了程序所依賴的組件的版本信息,所以操作系統(tǒng)可以根據(jù)這些信息來裝載正確的共享資源。比如應(yīng)用程序是在comctl32的v5上進(jìn)行開發(fā)的,并在application manifest里指明了依賴于comctl32的v5版本。現(xiàn)在,即使系統(tǒng)上存在有別的版本的comctl32,操作系統(tǒng)也仍將為該程序裝載v5版本的資源。

…..

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 上杭县| 西安市| 百色市| 乌兰察布市| 保靖县| 若尔盖县| 孝昌县| 临漳县| 韶山市| 阳城县| 理塘县| 萨嘎县| 贵溪市| 兴安县| 博客| 成安县| 赤壁市| 朝阳区| 德格县| 辽宁省| 登封市| 曲沃县| 察雅县| 北票市| 天等县| 岢岚县| 方正县| 新干县| 凯里市| 剑阁县| 襄汾县| 麻阳| 玛沁县| 尼玛县| 利川市| 丹阳市| 石河子市| 舞阳县| 句容市| 宜都市| 崇州市|