Inno Setup 在安裝程序開始前和卸載程序開始前,檢查並關閉運行的進程

 

(2011-12-29 11:54:56)
標籤:

innosetup

it

分類: 開發工具經驗累積
Inno Setup在安裝程序前,若是有使用的進程在運行,會有錯誤提示,而使得Installer沒法寫入。
一樣,在卸載程序前,若是有使用的進程仍在運行,會有錯誤提示,以後卸載不乾淨,須要手動清除。
 
因此,只要在安裝程序前或者卸載程序前,檢查並關閉掉用到的正在運行的進程,就沒有問題啦。
 
[code]
// 安裝前檢查關閉**進程
procedure CurStepChanged(CurStep: TSetupStep);
var appWnd: HWND;
begin
  if CurStep = ssInstall then
  begin
     // 檢查××進程是否在運行,是則關閉進程
     appWnd := FindWindowByWindowName('進程窗口名稱');
     if (appWnd <> 0) then
     begin
        PostMessage(appWnd, 18, 0, 0);       // quit
     end;
  end;
end;
 
// 卸載前檢查關閉**進程
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var appWnd: HWND;
begin
   // 檢查**進程是否在運行,是則關閉進程
   appWnd := FindWindowByWindowName('進程窗口名稱');
   if (appWnd <> 0) then
   begin
      PostMessage(appWnd, 18, 0, 0);       // quit
   end;
end;
 
其中,Pascal提供了兩個函數用於查找進程窗口: FindWindowByClassNameFindWindowByWindowName,前者是根據類名,後者是根據窗口名,查找與之匹配的頂層窗口句柄。
能夠開啓進程,而後使用spy++工具,獲取進程對應的窗口名或類名。
相關文章
相關標籤/搜索