2009-10-27 15 views
19

我只是一個愛好者程序員或多或少,並已成長在.NET ClickOnce世界的編碼方式。標準「安裝」實際上做了什麼?

當一個「安裝」一個程序,究竟發生了什麼?!

另外:一些小應用程序/工具只是從EXE運行。爲什麼大多數程序需要一個奇特的安裝過程?有什麼優點,缺點,優點&缺點?安裝通常是必要的還是更像標準實踐?

道歉的額外問題。我只是希望一個簡單的英語或多或少的外行人對關鍵因素的解釋。

回答

28

你真的在尋找很多遺留的原因,所有這些原因都已經成爲Windows世界的標準實踐。

首先,有些反差,因爲它並不總是這樣。 Mac OS X中的「應用程序」僅僅是一個內部具有特定結構的目錄,以.app擴展名命名。安裝應用程序非常簡單,只需將它拖到應用程序文件夾即可,而卸載包括將其拖至垃圾箱。就是這樣,沒有花哨的安裝者(通常)是必需的。

在Windows上,應用程序通常由需要「註冊」的獨立組件構建。這涉及到安裝程序將一些零碎片段寫入Windows註冊表,告訴Windows在哪裏找到組件。是的,應用程序可能應該知道在哪裏可以找到它們(因爲它們都安裝在同一個地方),但多年傳統和不同的連接組件的方式讓我們獲得了今天的位置。

通常情況下,在Windows安裝程序:

  • 將文件複製
  • 寄存器部件
  • 組安全權限(如適用)
  • 將圖標添加到開始菜單和/或桌面
  • 向註冊表中寫入更多內容以告訴Windows將程序添加到「添加和刪除程序」中
+0

會upvote,但今天跑出去:( – RCIX 2009-10-27 08:33:36

+0

Thx的答覆格雷格。現在,任何不能完成的應用程序的第一次運行?只是好奇,這是必要的或只是'完成' – MrGreggles 2009-10-27 08:59:12

+1

很多這確實可以在應用程序的第一次運行中完成,然而,首先安裝程序存在的主要原因之一是提供* uninstaller *。通常Windows應用程序需要在周圍的許多地方文件系統和註冊表是唯一一個清理它的好方法,就是讓程序爲你做這件事 – 2009-10-27 09:01:47

1

取決於您正在安裝的程序。 「安裝」的範圍可以從簡單地將(相對較小的)可執行文件複製到目錄,設置共享庫,執行補丁級別檢查(我設計爲在SP2或更高版本上運行 - 是否有SP2或更高版本?),並更改系統配置,無論是爲當前用戶還是爲所有用戶。他們中的大多數人還將安裝註冊到軟件包管理器,以便稍後可以輕鬆卸載。

+0

還有一些程序包括註冊表更改或其他更改。 IronRuby的安裝程序設置文件,NGEN在機器上的文件,並設置%PATH%以包含IronRuby的可執行文件以用於命令行。 – 2009-10-27 07:33:18

+0

我想我用「改變系統配置」來覆蓋那個 - 試圖儘可能地使它成爲系統無關的。 – ty812 2009-10-27 07:36:28

+0

Thx Martin,它有助於填寫圖片。順便提一下,你的sig形象讓我想起了幾年前我在uni看到的一張汽車貼紙:「我是一名山地男子,我喜歡山區女性。」有點話題,但無論如何... – MrGreggles 2009-10-27 11:11:26

1

Wikipedia tells us,典型的安裝程序創建或修改下列:

  • 共享和非共享的程序文件
  • 文件夾/目錄
  • 視窗註冊表項(僅Windows)
  • 配置文件條目
  • 環境變量
  • 鏈接或快捷方式

因此,如果您的程序需要一個或多個這些修改,您應該創建一個安裝程序來完成這項工作。

+0

嗨Moayad,感謝您抽出時間。我仍然不確定所有這些東西都需要安裝程序,但我想有些事情可以做。 – MrGreggles 2009-10-27 11:20:47

2

使用一個「神奇」的原因安裝過程

  1. 記錄安裝過程 所以可以重播(修復)或 撤消(卸載)
  2. 執行操作beyons簡單的文件複製(創建註冊表項,註冊組件,執行其他任意操作

大多數安裝中的「標準」選項將是「通常需要的所有位,位於標準位置,如Program Fi文件「安裝時沒有自定義,可能沒有啓用某些專家級功能。

13

該程序試圖修改計算機的方式,它的工作原理和所有競爭產品失敗。在Windows中,這意味着:

  • 修改任意鍵在註冊表中,直到它變得緩慢,滿是碎項
  • 跟單古代版軟件能夠使用
  • 在傳播儘可能多的文件替換DLL文件儘可能多的地方
  • 創建一個卸載腳本,以保持用戶不需要重新安裝操作系統即可擺脫軟件的錯覺。如果用戶試圖運行這個腳本,那麼你可以教育他/她不要再這樣做,例如「文件....可能被其他應用程序使用,你真的想刪除它嗎?是/否/可能/任何答案/所有答案都正確「
  • 在隱蔽處安裝掛鉤,以便在計算機啓動時運行軟件。這可能會減慢啓動過程,但您的軟件將立即啓動,因此,爲您付出很低的代價。
  • 做這需要很長的時間,但沒有人能告訴你做什麼不起眼的東西(什麼是「安裝程序正在準備安裝」 15分鐘做什麼?)
  • 檢查是否有足夠的磁盤空間,但使用32位整數確保它不能安裝在1TB磁盤上。
  • 一個重要的任務是安裝失敗並打印錯誤:「安裝失敗,這可能是因爲安裝了防病毒軟件,請停用並重試。這將確保用戶將開始不信任他們的反病毒(尤其是在第二次運行期間安裝成功後,因爲安裝程序中隱藏的錯誤未觸發),並且很多人會忘記再次啓用病毒掃描程序,或者甚至卸載該死的東西。

    全世界的病毒作者都是人!垃圾郵件彌補了互聯網上的大部分流量,這意味着它很重要,誰不想成爲地球上最大的社區的一部分?最重要的是,你可以通過這種方式賺大錢。所有你需要的是一個弱小的良知和/或一些犯罪能量。

  • 您的安裝的一個非常重要的部分是增加註冊表鍵HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-7-9-23-64738-1349283462-3754093625-4491\IsYourWindowWideEnough\NotGivenUpYetHuh\GoAway\ImportantSystemInformation\Let See How You Can Handle Spaces\DamnIGottaStopSincePathsCanHaveOnl\ReinstalCtr

    這個重要的系統計將有助於建立一個不穩定的幻象用戶,直到他們感到一種強烈的衝動重新安裝整個系統。這將有助於專業IT行業銷售支持時間,銷售新電腦,更多內存,更大硬盤或新的Windows版本(他們必須更好,對嗎?)。

注意:如果您認真對待本文,請尋求專業人士的幫助。

+1

太棒了! :) +1 – 2009-10-27 08:10:12

+0

lolololol ...會upvote,但跑出去:( – RCIX 2009-10-27 08:34:14

+0

一個很好的閱讀,thx。 – MrGreggles 2009-10-27 11:07:36

1

安裝者抽象通過方便的,自給自足的用戶界面部署軟件基礎設施,這通常是包含在歸檔中,複雜的片的過程。

該UI可以是圖形化的,也可以是基於命令行輸出的文本,例如unix shell(例如bash)。對於圖形安裝程序,通常使用所謂的安裝引導程序,在後一種情況下,可以使用安裝腳本(可以是bash腳本,Microsoft批處理腳本或在命令行上運行的其他任何腳本語言)。

簡單的情況下的應用僅僅是一個可執行文件,與操作系統知道該怎麼才能運行它與該文件做。應用程序文件可能位於包含子文件夾和其他輔助文件的文件夾中,打包到一個存檔中。在這種情況下,可能不需要安裝程序。

對於複雜的軟件,整個軟件平臺和與底層操作系統的基礎設施緊密集成,可能需要,例如強制執行軟件產品的版權。

Windows上的許多安裝程序提供了/e/extract標誌。例如setup.exe /e允許在沒有安裝程序運行其安裝腳本的情況下提取歸檔內容。 我最近只需要做that

輪換着心態

安裝程序幾乎成爲提供專業的軟件,無論多麼簡單的底層軟件資產規範。隨着越來越多的精通計算機的用戶以及希望將應用程序從一個桌面遷移到下一個桌面,便攜式軟件通常以簡單的存檔形式提供,正變得越來越流行。

(我不知道多少時間總共我已經花了安裝程序,但它絕對是天量級)。

任務的安裝程序可以處理爲:

  • 拆包(通常利用外來,高壓縮的歸檔)
  • 確保系統的硬件要求
  • 確保足夠的硬盤空間
  • 確保軟件平臺運行時間要求(例如「再發行」)
  • 檢查更新的軟件更新
  • 從遠程倉庫
  • 下載軟件創建和/或更新程序文件和文件夾
  • 創建配置文件,註冊表項或環境變量
  • 安裝軟件驅動程序,安裝或卸載設備
  • 通過解釋安裝步驟,創建鏈接,快捷方式提高日常用戶的可訪問性
  • 通過促進自己的軟件書籤等...
  • 創造激勵用戶實際啓動該軟件,在安裝時,滑動滑通過
  • 過程中呈現的軟件的關鍵點創建額外的收入,通過軟件捆綁
  • 配置內核模塊和自動運行的組件(例如守護程序,窗口服務)
  • 的sofware的自動修補
  • 設定文件夾,文件和用戶權限
  • 創建的UUID引用夫婦軟件的安裝實例,防止便攜

PS:如果你能想到其他的點,讓我知道,我會把它們合併。

相關問題