關於setup factory的一些基本操作

最近需要進行程序打包,發現setup factory是個比較好用的軟件,有詳細的API文檔可以查閱,整理了一下在打包過程中用到的基本操作跟大家分享:

1、註冊表基本操作(讀、寫),爲了解決程序重複安裝的問題

在action的on startup中寫入代碼(如何寫入註冊表在文章下邊):

--這裏是對註冊表進行檢查,檢查是否有該註冊表
--檢查註冊表:
local Key = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "software\\隨便起個名字\\XX軟件(用英文最好)");
local productName = SessionVar.Expand("%ProductName%");

if (Key == true) then
    local diaInfo = Dialog.Message(ProductName, String.Concat("檢測到已安裝","如需重新安裝,請先卸載軟件"), MB_OKCANCEL, MB_ICONQUESTION, MB_DEFBUTTON1);
    --無論選擇確定還是取消,都退出程序
    Application.Exit(); 
end

2、在安裝過程中安裝軟件需要的環境,比如VS2010,13等等

首先需要導入環境文件,
//添加環境文件
點擊上邊菜單欄的Resources,然後選擇Primer Files,然後添加你的文件就好。
在on pre install中寫入代碼

--安裝過程中,安裝環境
--此處的vcredist_x64.exe就是上邊剛剛添加的文件的文件名,不要寫錯了,不然就報錯了
Shell.Execute(_TempLaunchFolder.."vcredist_x64.exe");

3、寫入註冊表

--過程中寫入註冊表
--寫入的註冊表名字,和檢測的註冊表名字一致就行了
Registry.CreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\自己起的名字\自己起的名字");

4、創建卸載文件,因爲setup factory的uninstall是要給參數的,所以需要自己生成一個卸載快捷方式,這一步比較cao淡,有很多坑,網上的教程大多都埋了坑

--在on Post Install中寫入代碼
--創建卸載
--注意下邊的斜槓還有反斜槓以及單引號包着雙引號
Shell.CreateShortcut(SessionVar.Expand("%AppFolder%"),
SessionVar.Expand("卸載%ProductName"),
SessionVar.Expand("%AppFolder%\\uninstall.exe"),
SessionVar.Expand('"/U:%AppFolder%\\Uninstall\\uninstall.xml"'),
SessionVar.Expand("%AppFolder%"),
SessionVar.Expand("%AppFolder%\\uninstall.exe"),
0,
SW_SHOWNORMAL,
nil,
"");

5、卸載軟件時需要刪除註冊表

--卸載時:
--在uninstall的actions的on Post Uninstall中寫
--刪除註冊表
Registry.DeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\註冊表名字\\註冊表名字");

6、防止程序運行過程中被刪除

--寫個函數,好看一些
function CheckProcessStatus(process_name)
    --獲取當前所有進程的列表
    local processes_list = Window.EnumerateProcesses(false);
    --判斷是否找到該進程名稱
    local process_find = false;
    --進程句柄,如果需要關閉進程,需要獲取,如果不需要不獲取也可以
    local process_handle = nil; 
    local productName = SessionVar.Expand("%ProductName%");
 
    if Table.Count(tblProcesses) > 0 then
        local process_name_tem;
        local handle_tem;
        for handle_tem,process_name_tem in pairs(processes_list) do
            if(String.Find(process_name_tem,process_name,1,false) ~= -1) then
                process_handle = handle_tem;
                process_find = true;
            end
        end
    end
    if(process_find and process_handle)then
        --關閉進程
        Window.Close(process_handle,CLOSEWND_TERMINATE);
        --或者進行彈框提示
        --local diaInfo = Dialog.Message(ProductName, String.Concat("程序正在運行中","如請先退出程序在進行卸載"), MB_OKCANCEL, MB_ICONQUESTION, MB_DEFBUTTON1);
        --Application.Exit(); 
    end
end


--使用該函數進行檢測即可
CheckProcessStatus("XXX.exe");

 

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