如何运用inno在安装和卸载时提示用户结束进程?
2015-11-05 06:28
330 查看
我尝试着写了一段,但是卸载段存在问题,请指点!
CODE
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
[Code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function InitializeSetup(): Boolean;
begin
Result:= true;
if RunTask('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask('MyProg.exe');
end
end;
function InitializeUninstall(): Boolean;
begin
Result:= true;
if RunTask('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask('MyProg.exe');
end
end;
======================================================
======================================================
======================================================
用上面的代码,在卸载时判断进程的dll已经没有了,所以不能调用它的函数。其实安装和卸载时调用的dll是不同的。
这样修改代码应该可以:
CODE
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
[Code]
function RunTask1(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
function KillTask1(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall uninstallonly';
function InitializeSetup(): Boolean;
begin
Result:= true;
if RunTask1('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask1('MyProg.exe');
end
end;
function InitializeUninstall(): Boolean;
begin
Result:= true;
if RunTask('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask('MyProg.exe');
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
end
end;
CODE
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
[Code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function InitializeSetup(): Boolean;
begin
Result:= true;
if RunTask('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask('MyProg.exe');
end
end;
function InitializeUninstall(): Boolean;
begin
Result:= true;
if RunTask('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask('MyProg.exe');
end
end;
======================================================
======================================================
======================================================
用上面的代码,在卸载时判断进程的dll已经没有了,所以不能调用它的函数。其实安装和卸载时调用的dll是不同的。
这样修改代码应该可以:
CODE
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
[Code]
function RunTask1(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
function KillTask1(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall uninstallonly';
function InitializeSetup(): Boolean;
begin
Result:= true;
if RunTask1('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask1('MyProg.exe');
end
end;
function InitializeUninstall(): Boolean;
begin
Result:= true;
if RunTask('MyProg.exe', false) then
begin
if
MsgBox('安装程序检测到 MyProg.exe 正在运行!'#13''#13'单击“是”按钮关闭 LockOn
程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO) = IDYES then
KillTask('MyProg.exe');
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
end
end;
相关文章推荐
- inno安装卸载时检测程序是否正在运行卸载完成后自动打开网页-代码无效
- Inno Setup 插件大全
- ULK --- Chap3 Processes: Identifying a Process
- INNO安装卸载自动结束进程插件使用
- Inno Setup 在安装程序开始前和卸载程序开始前,检查并关闭运行的进程
- INNO:检测程序是否已经安装,是则弹出卸载提示。
- Inno Setup 安装、卸载前检测进程或服务
- 断点续传2
- 断点续传
- Python_编程特色
- 5.2 模型表示
- LeetCode Maximum Gap
- 线程池ThreadPoolExecutor使用简介(转)
- 在终端下使用Git上传本地代码至GitHub
- Lesson2 Square number
- aps clang: error: linker command failed with exit code 1 (use -v to see invocation)
- Codeforces Round #329 (Div. 2) A 2Char
- 这一页干的真多...
- 第九周学习报告
- *LeetCode-Longest Increasing Subsequence