使用inno setup打包时 如何关闭已运行的软件

hasyz 2011-04-28 10:00:47
我想实现运行安装包时,检测到当前软件正在运行就自动退出软件,并继续安装
...全文
305 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hasyz 2011-04-28
  • 打赏
  • 举报
回复
up
自己顶
hasyz 2011-04-28
  • 打赏
  • 举报
回复

function InitializeSetup():Boolean;

begin

Result := true;

HasRun := FindWindowByWindowName('正在运行的程序名');

while HasRun<>0 do

begin

if MsgBox('安装程序检测到你的应用程序正在运行。' #13#13 '您必须先关闭它然后单击“是”继

续安装,或按“否”退出!', mbConfirmation, MB_YESNO) = idNO then

begin

Result := false;

HasRun := 0;

end

else

begin
Result := true;

HasRun := FindWindowByWindowName('安装程序名称);

end;

end;

end;



我现在在inno setup中的[code]段中是这么写的,我想实现点击是的时候自动退出应用程序。
因为没学过Pascal,实在是看不懂,求代码
浩南_哥 2011-04-28
  • 打赏
  • 举报
回复

[Setup]: AppMutex
这个指令用于防止用户在应用程序仍在运行的情况下安装新的应用程序版本,以及防止用户卸载正在运行的应用程序。它指定一个或多个已命名互斥中的名字 (多重互斥用逗号隔开),安装程序和卸载程序在启动时检查该名字。如果没有退出,安装程序/卸载程序将显示消息: “[安装程序或卸载程序] 发现 [AppName] 当前正在运行,请现在关闭所有运行中的程序,请先关闭所有运行的窗口,然后单击“确定”继续,或按“取消”退出。”。这个值可以包含常量。

使用这个指令需要你添加代码到你的应用程序,这个应用程序是用你在这个指令中指定的名字创建一个互斥的应用程序。下面是在 Delphi、C 和 Visual Basic 创建一个互斥的示例。该代码将在应用程序启动时执行。

Delphi:

CreateMutex(nil, False, 'MyProgramsMutexName');

C:

CreateMutex(NULL, FALSE, "MyProgramsMutexName");

Visual Basic (由 Peter Young 提交):

'放在声明段:
Private Declare Function CreateMutex Lib "kernel32" _
Alias "CreateMutexA" _
(ByVal lpMutexAttributes As Long, _
ByVal bInitialOwner As Long, _
ByVal lpName As String) As Long

'放在启动代码 (Form_Load 或 Sub Main):
CreateMutex 0&, 0&, "MyProgramsMutexName"

你不需要的你的应用程序终止之后指明退出互斥对象,系统会自动执行。也不推荐你这么做,因为理想的互斥对象应该在进程完成终止后退出。

请注意互斥名比较在 Windows 中是区分大小写的。

To specify a mutex name containing a comma, escape the comma with a backslash.

查阅 MS SDK 帮助中的 CreateMutex 主题获取有关互斥的更多信息。

示例:
AppMutex=MyProgramsMutexName


看帮助文档
hasyz 2011-04-28
  • 打赏
  • 举报
回复
up
在线等

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧