4
A
回答
1
最好的选择是使用互斥锁来查看它是否仍在使用AppMutex
运行。关闭它的一种方法是找到窗口句柄,然后发布简单的WM_CLOSE消息。
还有其他选项,如Files in use extension和PSVince
也看到this article一个位的更多信息。
5
这是我做的事情,以提示用户关闭程序,如果它被发现运行。
function CheckProcessRunning(aProcName,
aProcDesc: string): boolean;
var
ShellResult: boolean;
ResultCode: integer;
cmd: string;
sl: TStringList;
f: string;
d: string;
begin
cmd := 'for /f "delims=," %%i ' +
'in (''tasklist /FI "IMAGENAME eq ' + aProcName + '" /FO CSV'') ' +
'do if "%%~i"=="' + aProcName + '" exit 1';
f := 'CheckProc.cmd';
d := AddBackSlash(ExpandConstant('{tmp}'));
sl := TStringList.Create;
sl.Add(cmd);
sl.Add('exit /0');
sl.SaveToFile(d + f);
sl.Free;
Result := true;
while (Result) do
begin
ResultCode := 1;
ShellResult := Exec(f,
'',
d,
SW_HIDE,
ewWaitUntilTerminated,
ResultCode);
Result := ResultCode > 0;
if Result and
(MsgBox(aProcDesc + ' is running. This program must be closed to continue.'#13#10 +
'Please close it and click Yes to retry or click No to cancel this installer.',
mbConfirmation,
MB_YESNO) <> IDYES) then
Break;
end;
DeleteFile(d + f);
end;
我用它在下面的特殊代码段如下所示:
// Perform some initializations. Return False to abort setup
function InitializeSetup: Boolean;
begin
// Do not use any user defined vars in here such as {app}
InitializeGlobals;
Result := not (CheckProcessRunning('bcb.exe', 'C++ Builder') or
CheckProcessRunning('delphi32.exe', 'Delphi' ) or
CheckProcessRunning('bds.exe', 'Rad Studio' ));
end;
function InitializeUninstall: Boolean;
begin
InitializeGlobals;
Result := not (CheckProcessRunning('bcb.exe', 'C++ Builder') or
CheckProcessRunning('delphi32.exe', 'Delphi' ) or
CheckProcessRunning('bds.exe', 'Rad Studio' ));
end;
15
在[UninstallRun]部分
,可以添加以下代码:
Filename: {sys}\taskkill.exe; Parameters: "/f /im MyProcess.exe"; Flags: skipifdoesntexist runhidden
1
相关问题
- 1. 使用Inno Setup的
- 2. Inno Setup:使用JSON
- 3. 如何使用Inno Setup注册.NET DLL
- 4. 如何在Inno Setup中使用gacinstall?
- 5. Inno Setup:如何在InitializeWizard中使用WizardForm.TasksList.Items?
- 6. 如何使用Inno Setup创建热键
- 7. 使用Inno Setup安装IIS
- 8. 使用子进程来确定进程何时结束
- 9. Inno Setup:如何查看Inno Setup Preprocessor的输出(翻译)?
- 10. 如何中止Inno Setup的
- 11. Inno Setup - 如何使用Inno Media Library循环播放视频
- 12. 如何使用C++结束进程?
- 13. 如何使用Inno Setup安装程序升级MSI安装?
- 14. 如何使用Inno Setup取消安装程序?
- 15. Inno Setup - Conditional DisableDirPage
- 16. GetComputerNameString Inno Setup的
- 17. 在Inno Setup的
- 18. 如何从Inno Setup调用“npm install”?
- 19. 如何结束进程
- 20. Inno Setup - 卸载多个应用程序
- 21. Inno Setup的简单进度页面
- 22. Inno Setup的百分比%进度条
- 23. 如何使用Pascal Inno Setup使用字符串变量ExpandConstant?
- 24. 从Inno Setup的回来 - 已安装的应用程序失败
- 25. 用Inno Setup安装IIS
- 26. 用Inno Setup安装Python
- 27. Inno Setup的所有用户
- 28. Inno Setup StringChangeEx失败
- 29. Inno Setup/SUPPRESSMSGBOXES定制
- 30. Inno Setup的卸载
也许一个简单的互斥解决方案就足够了?在您的应用程序中添加一个互斥锁,然后使用'Setup'部分中的'AppMutex'参数。 –