程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> .NET對軟件安裝的沖擊

.NET對軟件安裝的沖擊

編輯:C語言基礎知識

什麼是.NET?
 …
.NET是如何改變整個軟件安裝的?
        .NET改變了我們進行軟件安裝的許多方式。最明顯的,我們有了新的語言C#。還有,操作系統也發生了微妙的變化,以及它處理共享代碼的方式。

關於元數據(Metadata)
     首先,你必須了解什麼是Managed Code?所有基於微軟中間語言(MSIL)的代碼都是以Managed Code運行的。比如.NET推出的新語言C#就完全是以Managed Code運行的。而其他Visual Studio .NET附帶的語言,比如Visual C++,允許Managed Code 和None-managed Code 混合使用。
        那麼Managed Code 有什麼特點呢?它與None-Managed Code 的最大區別就是包含了元數據(Metadata)。元數據描述了代碼裡的每一個元素,允許.NET的運行庫對其進行管理,並使得代碼可以自描述(Self-Describing)。.NET運行庫通過使用元數據來提供諸如內存管理、跨語言集成、代碼安全和對象生命周期自動控制等等服務。簡單的說,Managed Code就是可以與.NET運行庫以“契約合作”的方式運行的代碼。
       元數據可以包括assemblies、可裝載文件、類型、方法等等。與制作安裝關系最為密切的就是assembly manifest了。Assembly是一個程序的主要組成部分,包括了所有的功能、版本信息,並作為一個整體進行發布。每一個Assembly都要包括一個assembly manifest,並使得assembly 可以自描述。Manifest包括:

  •  以文本表示的assembly 標識、版本等,如果要與別程序共享,還要包括數字簽名。
  •  描述包括的文件
  •  指定assembly的類型和資源,並指明該assembly輸出哪些。
  •  列舉所有依賴的assembly。
  •  指明運行需要的許可權限

         Manifest裡也包括了以前是由自注冊(Self-Registration)來完成的數據。比如所有的類型信息存放在Manifest裡,這些Manifest數據又都放在.DLL或.EXE文件裡。這樣通過Manifest我們就可以很容易的知道Managed Code 的相互依賴關系,而不會漏掉任何信息。但是,如果是Managed Code 和None-Managed Code的混合情況,就不是那麼容易做到了。
      如果沒有一種新的安裝技術出現,開發者將面臨一個大難題。

對自安裝(Self-Installing)代碼的誤解
         其中一個就是,使用Managed Code編寫的軟件不需要安裝。因為一些安裝的任務已經由元數據完成了,比如COM組件的注冊。只要把程序的所有文件拷貝到一個目錄下面,就可以直接運行了。很遺憾,這並不是軟件安裝的全部過程。
         軟件安裝並不是簡單的把文件從位置A拷貝到位置B。軟件安裝程序應該是給用戶提供一個友好的、可靠的和統一的方式,把軟件安裝到用戶的機器上面。首先,安裝程序需要通過一個統一的熟悉的用戶界面,讓用戶選擇安裝的選項,然後創建文件夾、快捷方式,進行升級、網絡安裝,還有許可證管理等等。在上面的例子裡,你無法為用戶完成所有這些事情,更不用說許可證管理了。
         另外,Managed Code 和None-managed Code混合的應用程序也不能自安裝。而且,要安裝這樣的程序比安裝純粹的None-managed Code 還要麻煩。我們不可能一下子全部丟掉以前的代碼,全部轉成Managed Code 。所以,我們不得不認真的考慮這個問題。

Isolated Applications and Side-by-Side Components
        
 在Windows XP和.NET平台裡,微軟提供了一套機制來減少DLL Hell的發生。我們知道,應用程序一般都依賴於一些共享資源,所謂共享,就是說如果已經有一個資源安裝在了系統上,應用程序就不再需要安裝該資源了,直接使用就可以了。於是DLL Hell就這樣發生了,如果一個應用程序需要一個比系統上現有的共享資源版本更高的資源,於是它以新的高版本的資源代替了老版本。而且有這樣的可能,新版本的資源並不能與老版本的資源相兼容。而系統中只能存在該資源的一個版本,所以依賴於老版本資源的應用程序將崩潰!

         為了解決這個問題,微軟提供了兩種方法:Isolated Applications 和Side-by-Side Components。
         Isolated Application 就是讓應用程序在發布的時候,附帶了該程序所有組件的隔離版本(Isolated Version),這樣就不會受其他安裝程序影響了。但是這需要完全重寫代碼,代價太高。
         Side-by-Side組件就是可以在新舊版本的共享資源一起共存的環境中運行。Windows XP中的許多共享資源就是以Side-by-Side的方式來編寫的。開發者可以通過使用編寫Application Manifest來達到Side-by-Side 的好處。Application Manifest描述了程序所依賴的組件的版本信息,所以操作系統可以根據這些信息來裝載正確的共享資源。比如應用程序是在COMCTL32的V5上進行開發的,並在Application Manifest裡指明了依賴於COMCTL32的V5版本。現在,即使系統上存在有別的版本的COMCTL32,操作系統也仍將為該程序裝載V5版本的資源。

…..

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved