v5.33總結-折騰是風險與驚喜並存

【需求】

    即將迎來2017的除夕夜,公司剛發佈的是一個小的版本,在這個版本中我的工作是:用InstallShield製作新的安裝包。

    爲什麼變更重新制作安裝包的方式?是之前用XX插件(沒去了解)做的安裝包經常會被殺毒軟件報病毒。

【初嘗InstallShield】

原來也玩的做過安裝包,用vs自帶的工具去製作,在vs2013下,已經沒有提供部署工具了,不過可以下載安裝,一樣的用。

這裏寫圖片描述

既然需求已經指明是IS(InstallShield)來製作,那就去看看。

早在上一個版本中,因爲個人對這個感興趣,使用InstallShield2013LimitedEdition,這是一個輕巧的嵌入vs使用的版本,因爲可以免費試用,是“可視化界面”引導的方式,Next/Next以及網上初級的資料較多,還是很容易做出一個demo。

在這個版本中,想用之前自己做的demo,發現工程無法使用,試用期到了,註冊一下可以永久使用,那就去註冊吧。

註冊界面中的“國籍”一項是ComboBox,沒有數據,需要翻牆……

翻牆後發現給的序列號沒有作用……

有破解工具/方法,沒用……

網上說可以打電話給中國區的客服解決,告知已經對該版本已經不在維護……

給官方發郵件,來回兩三封,還是推薦使用最新版本……

這裏寫圖片描述讓我感慨一下這裏,因爲已有的demo,內心排斥新的版本,所以在怎麼幹掉試用期,花費了一段時間去……


【使用IS時遇到的事一:第三方軟件打包】

 如何將.NET Framework或者其他更多的第三方打包到安裝包中,如果目標機器沒有,自動安裝,且安裝的版本與電腦位數一樣?

這是一個系列問題。


 1.在IS中,提供了一大部分可供打包的第三方文件列表,以.prq文件的方式提供,在列表中勾選下載,便下載到你的本地IS路徑SetupPrerequisites文件夾中。(.prq是個xml一樣,裏面記錄了下載的地址路徑等信息)

2.如果你需要的第三方軟件不在此列表中,尋找該軟件的.prq文件,放在SetupPrerequisites文件夾中,刷新IS的該列表即可。

3.在列表中勾選,且每個右鍵/屬性都設置爲從安裝包中提取使用。

4.在生成安裝包的時候,也設置爲從安裝包中提取軟件。

這裏就體現了IS的強大,安裝包運行時,目標機器如果沒有你勾選打包進去的第三方軟件,會自動安裝。且如果是x86的電腦,會安裝x86的第三方軟件,否則安裝x64第三方軟件,前提是該第三方軟件的x86和x64版本都打包進去了。

【使用IS時遇到的事二:安裝界面】

這裏寫圖片描述 當我看到IS的logo,用IS做出一個安裝包時,我才明白小時候玩的遊戲和一些軟件的安裝包是用IS做的。

IS製作的安裝包界面可以選擇需要的Dialogs,也提供了一些theme,但是主體佈局結構逃不開左右雙欄結構。我替換素材,修改文字後,界面是美觀了一點,但是還是無法忍受這種佈局,且最不能讓我忍受的是,每一個界面中有“InstallShield”的字樣無法去掉。理解,但不願意接受。

工期還有一段時間,我問Frank

這裏寫圖片描述 Frank,爲什麼要用IS來做安裝包,醜爆了。
這裏寫圖片描述因爲強大,可以滿足我們的需求。
這裏寫圖片描述我們的需求很簡單。
這裏寫圖片描述如果可以滿足我們的需求,當然是越漂亮越好了。


【我對打包的理解】

當我用IS做出一個可以用於發佈的安裝包時,對打包有了一個系統的理解。
打包就是將vs下realease模式運行的文件加密後遷移至目標機器,且正常運行,在署個名。

這裏寫圖片描述 填寫基本信息

     a.軟件名稱
     b.公司名稱
     c.軟件版本號
     d.安裝包、應用程序和卸載程序的icon

這裏寫圖片描述軟件文件

     程序集、config、數據庫……

這裏寫圖片描述部署軟件運行環境

     .NET Framework、數據庫

這裏寫圖片描述其他(Core)

      軟件安裝默認的路徑
      軟件安裝目錄的結構
      安裝時候美麗的界面
      創建桌面與任務欄的快捷方式
      軟件是否可以重複安裝
      軟件是否可以在運行的時候卸載
      軟件卸載的是否乾淨
      軟件需要的第三方軟件是怎麼安裝給用戶
      ……

前三步是必須的,總結爲:某人的某物在各種環境下可以正常運行。

這裏寫圖片描述第四步並不是必須的,但是軟件與軟件的安裝包用戶體驗就差距在了這裏。


【嘗試Inno Setup】

這裏寫圖片描述在網上查找,別人的安裝包是怎麼做的?驚訝的發現,360、騰訊管家、PPTV等很多軟件的安裝界面風格很相似,尤其是有道雲筆記、網易雲音樂和QQ音樂,是一個有顏色的矩形,上面寫點字,下面有簡單的選項,安裝過程是輪播圖片。

這裏寫圖片描述 Inno Setup也支持可視化的界面製作,製作步驟比IS簡單多了,但相對功能也簡單多了。採取腳本的方式製作,找到了一個成熟軟件的安裝包,本着”有輪子就不造輪子”的思想,嘗試改改。支持pascal語言,用C#的底子嘗試去改,變量名放前面,類型放後面,Boolean和vb一樣,寫方法簽名是function和js一樣(能看到“語言是共通的”影子,也讓我堅定,要把C#精通才是目標。)

這裏寫圖片描述兩天的時間,居然真的該成功了。我在裏面加入了一些自己需要的功能,核心是:

 - 打包.NET Framework,如果目標機器沒有,運行安裝包中.NET Framework的安裝包。
 - 打包SqlCe,如果目標機器沒有,是x86運行安裝包中x86版本SqlCe安裝包,是x64運行安裝包中x64版本SqlCe安裝包。
 - 打包VC++,如果目標機器沒有,運行安裝包中的VC++安裝包。

這裏寫圖片描述由此感慨爲什麼程序猿喜歡開源。因爲開源,資料多一點,因爲開源,可以自己定義。IS固然強大,但也是在故步自封。
還有一點:自己做的東西,一定要自己看得過去才行。


【使用Inno Setup遇到的事】

在打包VC++組件的時候,我也想讓它像我打包的.NET Framework一樣,檢測目標機器沒有,運行VC++的安裝包,但是發現VC++不同於.NET Framework和數據庫,在XP SP2、XP SP3、Win7中註冊表的GUID各不相同,沒有辦法根據註冊表判斷。

那不管用戶有沒有,都去嘗試去安裝,這總不會有大問題…,但帶來的負面效果就是,用戶有了,還會彈出VC++的Windows Installer的界面,顯示要修復還是卸載,多一個沒有用的界面,總是讓人不爽。

有一種叫"靜默安裝"的方式,即不會顯示安裝過程,有就不安裝了,沒有就【偷偷的】給用戶安裝。但是VC++2012_x86版本給xp的目標機器上靜默安裝後,會自動重啓目標機器,這就更讓我惱火了,換成vc++2010的不會重啓,但是10不足以支持我們的需求。

直接將vc++的dll放到主程序文件夾中,當做軟件的一部分,也不去單獨安裝,以這樣的方式解決。

這裏寫圖片描述”靜默安裝”,哦,原來安裝完一些軟件,會推薦安裝一些軟件,有良心的呢,推薦安裝的軟件前面有個勾選,流氓的呢,在你不知情下就偷偷在安裝了,連托盤的提示都沒有。在這個版本中我還知道了有“靜默升級”這個詞,既有新版本發佈,用戶登錄舊的版本會自動升級。


【尾聲】
當我內心覺得驕傲時候,遇到了冷水,在這裏總結,和諸位共勉:

3. 打包了6個無用的文件,xml、pak、ico

    xml文件一般是代碼註釋的文件,像數據庫、ORM等都會有,不用打包進去。
    ico製作安裝包的時候選好就可以了,沒有必要放在安裝包裏面中。

這裏寫圖片描述 安裝過程中操作/提示增多

    目標機器沒有安裝.NET Framework,會先彈出一個僅含有"確定"的mbx提示:我們將引導您……
    目標機器沒有安裝數據庫,會先彈出一個僅含有"確定"的mbx提示:我們將引導您安裝……

4. 第三方軟件安裝與主程序安裝相對獨立

    之前的版本是用壓縮包製作的安裝包,檢測到目標機器沒有.NET Framework和數據庫後,分別點同意協議和確定,然後.NET Framework、數據庫和主程序三個軟件會共享一個進度條進行安裝。
    現在的版本是檢測到目標機器沒有.NET Framework,提示引導安裝後,提取安裝包中打包進去的.NET Framework安裝包運行,是原生的安裝過程。
    安裝成功後,緊接着自動檢測目標機器是否有數據庫,當目標機器中沒有數據庫,提示引導安裝後,提取安裝包中打包進去的數據庫安裝包運行,是原生的安裝過程。
    安裝成功後,緊接着安裝主程序軟件。

這裏寫圖片描述雖然是運行的一個安裝包,但過程中展現的是三個獨立的安裝過程,三個進度條,會給用戶造成一種錯覺:我安裝你的軟件,你給我安裝了些什麼亂七八糟的。

這裏寫圖片描述 卸載不乾淨

軟件使用過程中產生的一些文件在軟件卸載的時候沒有刪掉。

5. 可以覆蓋安裝

軟件已經安裝好,可以直接再次安裝覆蓋,沒有像Windows Installer一樣,有一個修復/卸載的界面。

這裏寫圖片描述 可以在運行時卸載

會刪掉一大部分文件,但是運行時用到的一些文件存留。

這裏寫圖片描述 默認安裝在D盤更好

如果檢測目標機器有D盤,將軟件安裝在D盤,即使用戶重裝系統也沒事。

這裏寫圖片描述 當雙屏的用戶運行安裝包,出現兩個安裝首頁,其中一個還帶有Windows邊框

...

但還是有做的好的地方

這裏寫圖片描述 安裝過程漂亮多了

這裏寫圖片描述 安裝目錄/任務欄的文件夾是中文名稱

這裏寫圖片描述感悟:沒有一個功能是一個版本造就十全十美的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章