.net程序部署(setupFactory進階)


接上一篇 繼續使用上一篇的project 。將archive里無用的文件刪除 添加我們需要的文件進來。

config是一個文本文件。 注意所有文件的 destination都是 %appfolder%   ,這代表程序 安裝目錄 setupfactory有很多這樣的 全局變量 用起來非常方便 ,獲取系統環境桌面目錄 %desktop%  。 這類似 win批處理命令的%windir%  我們把目錄改一下 %appfolder%\tools,這樣安裝時就可再創建子文件夾tools

 

我們確確實實 想定義一個我們自己獨有的 用戶體驗好的 安裝包 ,我們不想千篇一律。

screens ->before installing 選項卡:

welcome to setup 刪掉,然后在license agreement編寫我們自己的 安裝許可文本:

我們需要自定義一個對話框界面  用來讓用戶在安裝過程中進行配置。在安裝時也將針對用戶的配置進行相應的處理。
添加一個我們自定義的安裝配置界面:

 

User information Select shortcut folder 兩屏也一並刪掉。

 

在創建custom Screen的時候 “下一步”按鈕的 腳本(單擊 screens  ->before installing -> 選中custom ->ecit->actions- >On Next 選項卡):

 

 1 -- These actions are performed when the Next button is clicked.
 2 -- advance to the next screen
 3 --采集數據 並放到全局變量里
 4 --端口
 5 port = DlgEditField.GetProperties(CTRL_EDIT_01).Text;
 6 --啟動菜單加快捷方式
 7 startup = DlgCheckBox.GetProperties(CTRL_CHECK_BOX_01).Checked;
 8 --桌面快捷方式
 9 desktop = DlgCheckBox.GetProperties(CTRL_CHECK_BOX_02).Checked;
10 --%StartupFolder%
11 runnow = DlgCheckBox.GetProperties(CTRL_CHECK_BOX_03).Checked;
12 --是否有加密狗
13 softkey=DlgCheckBox.GetProperties(CTRL_CHECK_BOX_04).Checked;
14 --Dialog.Message("title ddf",txport.Text);
15 Screen.Next();


這個很簡單 就是獲取幾個控件的值 並賦給變量,以便在稍后的過程中使用。

 

然后就是安裝過程中針對用戶的選項進行處理 ,安裝過程不就是 他自動生成的 拷文件么 。要我們管毛線啊。我這里只是一個示范 我們根據用戶選項追加配置文件 也就是config.ini 首先執行此代碼時 文件已經復制完畢 ,配置文件的目錄在 %appfolder%  寫文本文件  這樣即可。

還是 screens-> after installing ->ecit->actions->onPreLoad:

 1 -- These actions are performed before the screen is shown.
 2 --安裝完成 進行初始化全局變量里面的配置
 3 --端口,追加配置文件
 4 TextFile.WriteFromString(SessionVar.Expand("%AppFolder%\\config.ini"), "\r\nport="..port, true);
 5 --有無加密狗
 6 if softkey then
 7 TextFile.WriteFromString(SessionVar.Expand("%AppFolder%\\config.ini"), "\r\nhardwareIdType=softkey", true);
 8 end
 9 
10 if startup then
11 Shell.CreateShortcut("%StartupFolder%", "DcmPrintSCP", SessionVar.Expand("%AppFolder%\\NewScp.exe"), "", "%AppFolder%", "", 0, SW_SHOWNORMAL, nil, "shortcut for dcmprintscp");
12 end 
13 --根據復選框選項創建快捷方式 的代碼 這樣就可以了。
14 if desktop then
15 Shell.CreateShortcut("%DesktopFolder%", "DcmPrintSCP", SessionVar.Expand("%AppFolder%\\NewScp.exe"), "", "%AppFolder%", "", 0, SW_SHOWNORMAL, nil, "shortcut for dcmprintscp");
16 end 
17 
18 --卸載程序有問題 必須得新建一個快捷方式
19 Shell.CreateShortcut("%AppFolder%", "shortcut_uninstall", SessionVar.Expand("%AppFolder%\\uninstall.exe"), SessionVar.Expand("\"/U:%AppFolder%\\Uninstall\\uninstall.xml\"" ), "", "", 0, SW_SHOWNORMAL, nil, "shortcut for uninstall");

 

需要注意的:
字符串連接 是 ..這種方式 ,並不是C++里尋常的+號 也不是 VB里的連字符。

 

還有些需要注意的是 類vb 語法 並非完全跟vb一樣  ,比如這段

if startup then

xxx

End

 

最后我們需要 自己搞一個banner  我已經搞好了 ,既然做東西就要注重細節。

 

程序啟動時顯示安裝許可 ,然后是用戶自定義配置選項  然后是選擇安裝目錄。然后安裝程序釋放我們打包的文件到指定目錄。 然后我們的腳步根據用戶定義的配置選項追加配置文件 和創建桌面快捷方式 ,並且用戶沒有.netFramework框架 自動安裝。就這樣一個安裝包就做好了。像我這種需求 基本上 大部分功能我都用不完  只是冰山一角。

 

 

 

我在這bilibili的半天 你都不厭其煩的看完了  你再 根據自己的實際需求  , 再啃啃幫助文檔 就差不多了。

2016.8.24 時至今日  應公司業務需求 沒想到我又在倒騰這玩意 。有看到了以前沒注意到的東西 ,就像書樣 重新讀一遍又是一番滋味。
我說這腳本怎么這么靈活 這么強大呢,原來這腳本名叫LUA 是一種開源的經過成熟發展的東東,並且可以與C++寫的dll形成互操作調用。 
只是這玩意寫起來 找了半天 沒什么工具 既沒提示又沒啥的 純記事本的方式寫 太tm蛋疼了。

你看博客的代碼插入選項里都有Lua 是我兩年前沒發現他么

以前一直 打包系統必備項 打包系統必備項進安裝包里 ,然后怎么怎么實現自動安裝系統必備項。現在重要找到方式了 ,根本用不着倒騰dependencies
直接resources菜單 primer files 把.net安裝文件加進去 ,界面上說了 執行的時候會自定釋放到臨時目錄。

用注冊表功能 檢測.net是否安裝:

 1 --.net版本檢測
 2 
 3 dotnetVers=Registry.GetKeyNames(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\");
 4 if (dotnetVers~= nil) then
 5 for j,k in pairs(dotnetVers) do
 6 if (String.Find(k,"4.0",1,false)~= -1) then
 7 dotnetVer="4.0"
 8 elseif (String.Find(k,"4.5",1,false)~= -1) then
 9 dotnetVer="4.5"
10 end
11 end
12 end

 

還有需要值得注意的是,在這個設計界面隨意插入控件:

按鈕的事件在這里: ,先點到action去 

然后on ctr message 即是按鈕事件代碼:

找到附加文件的釋放目錄並進行自動安裝,以前不知道這玩意執行時還可以帶參數進行靜默安裝:

1 Shell.Execute(SessionVar.Expand("%TempLaunchFolder%\\NetFramework4.0.exe"), "open", " /passive", "", SW_SHOWNORMAL, true)

 

通過SetProperties函數更改控件的值 顯示隱藏等 ,通過GetProperties 獲取值。

DlgEditField.SetProperties

 記住 lua 還可以調用c++擴展。

基本上通過以上手段 加上lua強大的腳本控制邏輯 還有c++擴展的配合,你要制作什么樣的安裝包程序應該都可以倒騰出來 。

兩個字 倒騰


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM