安裝包是使用者接觸到工程的第一步,是以安裝包的制作非常重要。下面記錄一下使用Setup Factory制作安裝包的過程。
建立工程
打開setupFactory,按照提示一步步往下走即可。
在下圖中的位置添加需要的項目。
在下圖中的位置可以添加安裝時的語言。
完成後進入主界面
下面我們需要将項目中的exe檔案在桌面建立快捷方式。右鍵exe檔案(圖中的CTest.exe),選擇檔案屬性—>快捷方式。
主界面左側的“會話變量”可以檢視或修改安裝過程中所需要的變量;“螢幕”頁籤中可以對安裝的全過程一一修改;同理,“解除安裝”頁籤中的選項可以對解除安裝的全過程一一修改。
檢測軟體是否安裝
在安裝前,一般需要檢測使用者是否已經安裝過此軟體,并采取相對的措施。我們采用安裝完成後修改系統資料庫,啟動安裝時檢查系統資料庫的方法。
1.安裝完成後修改系統資料庫資訊。
在主界面中選擇螢幕->安裝之後,進去後點選“Finished Install”,再點選編輯,找到“操作”頁籤中的“On preload”,在這裡可以用代碼完成此項功能。
為了友善起見,在會話變量中将項目名稱盡量改為英文。代碼實作過程如下。
Tip:若不知道函數需要的參數,可以滑鼠輕按兩下函數,按提示填寫參數。
softname=SessionVar.Expand("%ProductName%");
Reg_soft="Software\\\\zhizhu\\\\"..softname;
--先在HKEY_LOCAL_MACHINE中的Software中建立一個表項“zhizhu”
result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "Software\\zhizhu");
if (result) then
else
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\zhizhu");
end
--建立本程式系統資料庫項,記錄安裝路徑和解除安裝路徑
Appfile=SessionVar.Expand("%AppFolder%");
Registry.CreateKey(HKEY_LOCAL_MACHINE, Reg_soft);
Registry.SetValue(HKEY_LOCAL_MACHINE, Reg_soft, "InstallPath", Appfile,);
Uninfile=SessionVar.Expand("%AppFolder%\\Uninstall\\uninstall.exe \"/U:%AppFolder%\\Uninstall\\uninstall.xml\"");
Registry.SetValue(HKEY_LOCAL_MACHINE, Reg_soft, "Uninstaller",Uninfile, );
然後要做的就是在啟動安裝時檢測系統資料庫中的資訊,若發現系統資料庫中有記錄,則提示使用者是否需要删除。解除安裝軟體時先擷取系統資料庫中存的解除安裝檔案位址,然後運作它。
softname=SessionVar.Expand("%ProductName%")
Reg_soft="Software\\\\zhizhu\\\\"..softname
result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE,Reg_soft)
if (result) then
msgBTN = Dialog.Message(softname,'提示:此機已安裝本軟體,是否重新安裝?\r\n\r\n ',MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1)
if (msgBTN == IDYES) then
result = Registry.GetValue(HKEY_LOCAL_MACHINE,Reg_soft,"Uninstaller",true);
File.Run(result,"","",SW_SHOWNORMAL,true);
result = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE,Reg_soft);
if (result) then
msgBTN2=Dialog.Message(softname,'解除安裝未完成!是否繼續安裝?\r\n\r\n 點選“是”繼續安裝;點選“否”,退出安裝。',MB_YESNO,MB_ICONINFORMATION,MB_DEFBUTTON1);
if (msgBTN2==IDYES) then
elseif (msgBTN2==IDNO) then
Application.Exit();
end
end
elseif(msgBTN==IDNO) then
Application.Exit();
end
else
end