簡體   English   中英

如何創建一個用C#編寫的獨立,自包含的安裝程序?

[英]How to create a standalone, self-contained setup program written in C#?

我有一個具有復雜設置要求的應用程序。 我非常熟悉一些用於創建安裝程序的工具,例如Wix,Visual Studio安裝項目,Inno-setup和第三方工具。 但對於這個特定的應用程序,我已經確定我需要在C#中從頭開始編寫安裝程序,而不是使用任何這些工具。 Joel表達的一些推理適用於此,除了我想在C#而不是MFC中執行此操作。

無論如何,我的問題是:我如何創建一個.NET可執行文件,它可以包含一組在運行時提取的文件? 在這種情況下,exe是安裝程序,文件是它需要安裝的程序文件。 另外,我如何使程序可執行完全獨立,即使我使用一些外部程序集(我自己以及第三方)我希望它們被打包成一個單獨的EXE(在C / C ++本機世界中這是通過靜態鏈接完成)。

UPDATE

這是我到目前為止所采用的方法,除非有人提出更好的建議,否則我會堅持這樣做:

  • 在XML中創建了一個清單文件,其中包含所有文件的列表以及包含我的安裝程序正在安裝的應用程序的文件夾結構。 我將此文件添加到VS項目中以進行安裝程序。
  • 用C#(zipfiles.exe)編寫了一個工具,它接受清單XML並創建一個包含所有文件的zip文件。 這個工具使用了很棒的DotNetZip庫來創建zip。
  • 在我的安裝程序項目中添加了一個預構建操作,該項目啟動了帶有清單XML的zip文件工具,並在項目文件夾中輸出了zip文件(Files.zip)。
  • 在我的安裝程序項目中添加了Files.zip作為嵌入式資源。
  • 我在運行時的安裝程序提取嵌入式zip並將其解壓縮到應用程序的目標安裝文件夾(再次使用DotNetZip)
  • 在我的安裝程序項目中添加了一個Post-Build操作,該項目使用ILMerge工具將它使用的所有外部程序集捆綁到exe中。

我現在有一個VS項目用於我的安裝程序,它構建一個自包含的exe文件,其中包含嵌入其中的所有文件。 當正在安裝的應用程序的文件列表發生更改時,我只需更新清單XML並重建。

現在我可以專注於我的其他設置邏輯!

只需創建一個標准的Visual Studio安裝項目,該項目只包含一個自定義安裝操作

這實際上是一個標准的.NET dll程序集,您可以運行安裝和卸載應用程序所需的任何代碼。

它的存在正是您提到的原因,即您的應用程序。 需要比標准安裝程序提供的更復雜的安裝和卸載步驟。

您可以使用Inno-Setup作為安裝程序的主要容器。 在Inno-Setup中,您可以運行並等待自己的應用程序,即安裝或配置應用程序的特定部分。

那么,像InnoSetup這樣的安裝程序系統多年來一直處於積極開發階段的原因是有道理的 - 編寫安裝程序並不是一件容易的事。 您說您希望完全控制該過程,您可以通過從頭開始編寫安裝程序來實現該過程。

這當然是真的,但它不是為寫這一切自己一個很好的理由-你可以通過從頭開始編寫這一切實現這一目標,但是通過使用例如創新安裝的腳本功能來創建自己的UI和設置雖然仍然依賴於Inno Setup經過充分測試的功能。

我認為從頭開始創建安裝程序所花費的時間將更好地用於檢查各種現有系統,評估哪些系統為所需的所有設置任務提供最佳支持,然后進行自定義,設置流程符合您的需求。

我們為每周更新新數據的應用程序做了這樣的事情。

我們創建了兩個應用。 第一個用於包裝安裝。 這包括收集文件以進行分發,然后將它們壓縮成zip存檔。 我們使用ChilkatZip創建了一個存檔,該存檔將自解壓,然后執行第二個應用程序,該應用程序在客戶端計算機上處​​理安裝過程。

然而,我們的需求相當簡單,但它允許我們刪除對Installshield的依賴,這種依賴會在內部引起一些支持問題。

安裝可能不會太難(假設已經安裝了.NET框架),但您還需要在安裝失敗和卸載期間考慮回滾。 這就是為什么MSI安裝如此復雜的原因。 您需要自己處理...

WIX是制作MSI的標准。 學習IMO有點復雜和令人沮喪,但值得。 計划花一天時間讓基本的安裝程序繼續運行。 這是微軟和許多其他公司使用的工具。

使用SharpSetup怎么 它允許您混合C#代碼(包括WinForms中的安裝程序GUI),WiX(用於創建基本設置,如文件,注冊表項,快捷方式)和C ++代碼(如果尚未安裝.NET Framework)。 構建過程將所有這些部分組合在一起,最終得到在任何現代Windows(W2K以上版本)上運行的獨立單文件安裝程序。

免責聲明:我是SharpSetup的作者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM