獨立可執行檔和安裝的可執行檔之間的差異?

獨立可執行檔和安裝的可執行檔之間的差異?

我注意到,至少在 Windows 上,您可以下載直接的、靜態連結的可執行檔並直接啟動它,或者編寫您自己的程式並執行它(甚至是動態的),而無需安裝它。

這引出了我的要點…安裝過程的目的是什麼?我的意思是除了也許Windows登錄。然而,出於實用性和使用目的,可以有一個單獨的、獨立的、獨立的程序,可以運行、存儲在非揮發性存儲上、通過其所在的任何設備的文件系統訪問並在操作系統上執行。那麼,如果許多幾乎任何規模的優秀程式都可以在不經過安裝配置的情況下完美運行,那麼所有「安裝這個」業務有什麼大不了的呢?這讓我有點困惑,除了資料庫或其他元資料/存取配置系統之外,如果後者(已安裝的可執行檔)以與獨立系統相同的方式執行和工作,那麼真正的區別是什麼?

我不知道未安裝的程式與已安裝的程式有什麼不同嗎?

PS:這不僅適用於 Windows 作業系統,也適用於任何實現類似功能的作業系統。

答案1

程式作為安裝程式而不是獨立的可執行檔出現的原因有幾個:

文件大小問題

  • 具有許多大型依賴項的程式可以捆綁基於 Web 的安裝程序,下載依賴項並將其放置在公共位置,以便多個程式可以共用它們。例如,DirectX 是一個非常大的函式庫。如果系統上依賴 DirectX 的每個程式都將整個 DirectX 執行時間捆綁在一起,那麼它將消耗大量空間。在 4 TB 硬碟時代,這似乎並不重要,但考慮到 SSD 的容量要小得多,並且它們在超級本上得到普遍使用,有些超級本的儲存容量只有 64 GB。當然,除了 DirectX 之外還有許多其他共用程式庫。

  • 非常大且持續更新的程序最好作為許多小文件的集合進行分發,以及檢查 Internet 是否有更新的啟動器或更新程序,如果存在任何更新,則僅下載所需的更改。如果所有大型程式都以單一整體可執行檔提供,則修補過程很可能需要重新下載整個可執行文件,因為由於文件鎖定,修補磁碟上正在執行的可執行檔幾乎是不可能的。此外,由於更新程式需要知道其檔案在哪裡,因此它通常將該目錄路徑儲存在註冊表中的眾所周知的位置。

使用者便利性問題

  • 非常大的程式(例如 Visual Studio 和 Microsoft Office)的安裝程式可讓使用者取消選擇某些功能的安裝(如果使用者知道他們永遠不需要它們)。這有 3 個潛在好處:減少磁碟空間消耗;如果安裝程式是網頁下載程序,則可以減少下載時間和頻寬消耗;它可以減少用戶機器上的“混亂”和“臃腫”,減少開始功能表/桌面快捷方式,減少啟動程式等。

  • 複雜程式的安裝程式通常附帶配置選項,使用者可以使用使用者友善的圖形介面作為安裝程式的一部分進行設定。例如,請參閱 MySQL 或 SQL Server 安裝程序,它可以引導您完成資料庫伺服器啟動和運行的整個過程,甚至在您按一下安裝程式上的「完成」之前。

  • 安裝程式可以提示使用者輸入所需的信息,例如許可證密鑰,只需輸入一次。這可以簡化程式本身的設計,並減少啟動時必須執行和檢查的事情的數量。這也使用戶有信心,一次該程式已成功安裝,它應該「正常工作」——程式中不再有可能阻止他們使用它的「陷阱」。

相容性問題

  • 有些程序與其他程序衝突。這是軟體工程中一個簡單而不幸的事實。在安裝已知與其他程式衝突的程式之前,請先檢查系統以查看是否安裝了不相容的程式通常會很有幫助。如果是這樣,則可以警告使用者。例如,舊版的 VMware 和 VirtualBox 中存在非常危險的不相容潛力,導致藍屏死機,因為一個程式會在另一產品已為使用者保留特殊的虛擬化處理器指令後嘗試使用該指令。如果您只是在沒有安裝程式的情況下向使用者提供最終產品,則必須檢查是否有不相容的產品:每一個程式啟動,這可能會減慢程式的啟動速度。

  • 程式可能依賴其他系統元件,這些元件只能在系統範圍層級安裝,而不能在每個使用者層級安裝。為了安裝這些特殊的系統元件,通常需要管理權限,並且通常必須執行安裝程式。

更高的特權和特殊服務

  • 有些程式的功能依賴作業系統的更改,如果沒有某種安裝程式以管理權限來處理它們,這些更改就很難實現。例如,安裝驅動程式或核心模組的程式(例如 Wireshark)無法簡單地運行,因為您絕對必須在單獨的檔案中傳送核心模式元件。在絕對最好的情況下,您仍然需要讓使用者手動解壓縮存檔,然後執行某種裝置驅動程式安裝程式。服務是另一個需要管理權限才能安裝的範例。安裝程式軟體特別擅長以優雅的方式取得管理員權限,而不需要主程式本身每次執行時都請求管理員權限(在許多情況下,這將是不必要的安全漏洞)。

在給出了安裝程序為何有用的所有這些原因之後,以下是來自另一方的一些觀察結果:

  • 許多程序,甚至那些只能作為需要管理員權限的安裝程序下載的程序,都可以從其安裝程序中強制“解壓”並直接運行,而無需安裝它們。其他程序,尤其是開源程序,透過以下方式重新打包成獨立的可執行檔:便攜式應用程式。值得注意的是一些程式從安裝程式解壓縮後,功能會減少、出現錯誤或其他問題。

  • 在 Windows 以外的作業系統上,幾乎總是可以簡單地下載(或編譯)程式並以普通使用者身分執行它們,而無需獲得 root 權限。對於作為作業系統核心部分的軟體包有一些例外,但對於大多數用戶應用程序,您可以在主目錄中運行它,而無需使用軟體包管理器在系統範圍內安裝它。 Windows 有點特殊,因為 Windows 上的大多數桌面程式都有安裝程序,通常無法透過任何其他方式安裝。

  • 即使在非 Windows 平台上,需要載入核心模組的程式也會附帶某種安裝程序,該安裝程式會編譯核心模組並將其安裝在正確的目錄中。如果該程序是安裝程序,您也可以期望看到安裝程序守護程式它將使用系統服務腳本啟動,例如在/etc/init.d.這種類型的「收縮二進位」在GNU/Linux 上是一種不太常見的分發方法,但大多數Linux 發行版仍然以可安裝套件的形式提供大多數軟體,每個套件都需要root 存取權(管理員存取權限)才能安裝。


結論

您問為什麼我們需要安裝人員。簡短的回答是我們不——無論如何,嚴格來說不是。幾乎沒有應用程式的例子不能原則上,捆綁成一個獨立的可執行文件,沒有資源,沒有安裝程式等。中,然後安裝它在程式啟動時動態地運行,並將其所有資源(映像、聲音等)捆綁在可執行檔的資料部分內。

是否使用安裝程式是一個問題選擇軟體生產商必須製作的。使用安裝程式有優點和缺點。許多供應商選擇分發他們的軟體兩個都作為安裝人員,作為獨立的二進位文件,或至少作為可以簡單解壓縮和運行的 ZIP 文件。對於絕對不需要安裝程式的軟體來說,這是一種非常務實的方法,並且讓每個人都感到高興。通常,除了安裝程式之外不以任何其他形式提供的軟體是需要管理權限才能安裝其自身某些元件的軟體,因為安裝程式是獲取所需權限的最優雅的方式。

就我個人而言,我發現安裝程式在日常工作中非常煩人,因為有時我想在我使用的電腦上沒有管理權限時運行程式。我有相當多的經驗手動解壓縮安裝程序以提取其中的程式文件,然後使這些文件正確運行。然而,在我家中的個人電腦上,我總是有管理存取權限,我發現安裝程式有益且方便,因為大多數安裝程式都為我提供了有用的選項,例如是否建立桌面快捷方式,如果沒有它,我將不得不手動執行。

答案2

安裝過程考慮以下項目:

  1. 是否安裝了所需的庫(api),例如.net框架版本,或直接X.

  2. 將一些額外的系統 DLL 檔案安裝到系統資料夾中。如果系統資料夾已包含這些檔案(相同版本),則忽略此步驟。這樣您就不需要相同 DLL 檔案的多個副本。

  3. 將捷徑安裝到「開始」功能表或桌面中,以協助您快速啟動應用程式。

  4. 正如你所說,修改註冊表。這一步驟實際上可以在應用程式首次在此計算機上執行時完成,因此並不特別重要。

  5. 非常重要:是否要捆綁軟體(例如 Google 桌面欄或 Yahoo! 欄到您的 IE 中)。這就是許多獨立軟體為開發者創造收入的方式。如果您使用免費軟體,請不要忘記這一點。

因為我們正在考慮一個「可執行」應用程序,所以我們不需要討論那些可以安裝 IE 附加元件或相關事物的步驟。

答案3

獨立程式沒有外部依賴。

它不必只是 .exe 文件,它可以具有隨附的庫和資料文件:將存檔解壓縮到資料夾並運行可執行檔。如果您只是解壓縮存檔,則不會將快捷方式新增至「開始」功能表,因此您必須導航至解壓縮的應用程式所在的資料夾並從那裡啟動它,或在「開始」功能表中手動為其建立快捷方式。許多電腦使用者發現這很困難。

更容易使用

安裝程式將引導使用者完成安裝過程。您可以下載安裝程式 .exe 或 .msi(前者更適合非進階使用者),然後執行它。它會選擇安裝資料夾(通常位於 )Program Files,複製文件,在「開始」功能表中建立捷徑。您已完成:在大多數情況下,您只需單擊幾次“下一步”即可。

然後轉到“開始”功能表並運行該應用程式。某些安裝程式提供安裝完成後啟動應用程式的選項。

如果應用程式開啟某種類型的文件或文檔,安裝程式會將其註冊到 shell。這樣您就可以單擊該文件將其打開。

授權協議

許多應用程式(無論是商業應用程式還是免費應用程式)都要求您先接受許可協議,然後才能使用其應用程式。在您確認同意許可條款之前,安裝不會繼續。即使您沒有閱讀許可證,您也已經同意了。

依賴關係

有時僅僅複製可執行檔是不夠的。應用程式經常使用共用元件或特殊的運行時庫。例如,必須安裝.Net框架運行時才能運行為.Net編寫的應用程式;即使是 Visual C++ 運行時,如果它不是靜態連結的,也必須安裝。安裝程序負責確保滿足所有相依性。

如果應用程式由多個 .exe 和/或 .dll 檔案組成,則動態連結到 Visual C++ 執行階段可減少磁碟空間。如果 .exe 和 .dll 是靜態連結的,則每個檔案中的執行時都會重複。

庫的許可條款可能不允許靜態連結。

安全

如果在運行時發現漏洞,可以獨立於應用程式進行更新。 .Net 和 Visual C++ 執行階段的更新透過 Windows Update 自動安裝。

如果可執行檔和函式庫是靜態連結的,那麼應用程式供應商必須重新編譯應用程式並發布更新版本。因此,使用共享運行時可以降低開發人員和供應商的應用程式維護成本。

安裝到Program Files也提供了更安全的環境:如果沒有管理員權限,則無法修改或刪除那裡的檔案。

登記處

許多 Windows 應用程式依賴註冊表中的條目。如果應用程式使用COM,則必須註冊所有對象,否則應用程式將無法建立所需的對象並且無法啟動。

答案4

簡單回答:獨立的 exe 不需要在電腦上安裝任何庫即可運行,並且不需要註冊表項或其他元件。

已安裝的文件是安裝程式包中的獨立元件,但通常依賴與其一起安裝的各種元件和函式庫。

在很多情況下,透過通用提取器(非官方更新:這裡),您可以提取安裝程式的內容並在 Windows 中無需管理權限即可執行程式。 MSI 安裝程式可以使用以下命令解壓縮少西

在大多數其他作業系統中,所有程式都可以透過使用者特定的「bin」、「lib」和主目錄中的其他目錄運行,而無需 root/管理員權限。就我個人而言,大多數時候我鄙視安裝程序,因為當我沒有管理權限時,它們讓我更難使用沒有管理權限的程序。但大公司以這種方式打包它們是為了簡化普通最終用戶的流程。

相關內容