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提供了兩個函數用於查找進程窗口:
FindWindowByClassName和
FindWindowByWindowName,前者是根據類名,後者是根據窗口名,查找與之匹配的頂層窗口句柄。
能夠開啓進程,而後使用spy++工具,獲取進程對應的窗口名或類名。