InnoSetup覆蓋安裝的時候可能會因為源程序正在運行而安裝失敗,以下腳本能夠關閉原運行進程。
[code]
// 安裝前檢查關閉**進程
function InitializeSetup():Boolean;
//進程ID
var appWnd: HWND;
begin
Result := true;
//Log('Checking If Running...');
//根據窗體名字獲取進程ID
appWnd := FindWindowByWindowName('IE Scavenger');
if (appWnd <> 0) then
//進程存在,關閉
begin
//Log('Is Runing...');
//給進程發送關閉消息
PostMessage(appWnd, 18, 0, 0); // quit
end else
//進程不存在
begin
//Log('Not Runing...');
end;
end;
InitializeSetup 函數在安裝程序初始化時調用,返回 False 中斷安裝,返回 True 反之。
FindWindowByWindowName 獲取窗口名與指定字串匹配的頂層窗口的句柄。這個函數不搜索子窗口 ,且不執行區分大小寫搜索。如果沒有找到窗口則返回 0。
運行流程就是根據窗口名獲取正在運行的程序,如果已經運行則強制關閉。相應的卸載的時候如果需要先關閉程序,可以調用編寫InitializeUninstall函數,關閉源程序。這種是無痛關閉,沒有任何提示。你可以自己添加提示,引導用戶進行操作。