论坛风格切换切换到宽版
  • 328阅读
  • 3回复

[已解决]安装与卸载检测文件在运行,按钮问题 [复制链接]

上一主题 下一主题
离线bby4061751
 

发帖
72
金钱
730
威望
73
只看楼主 倒序阅读 0 发表于: 01-08
老虎版主我是用你的这个代码
http://bbs.hanzify.org/read-htm-tid-59870-page-2.html



1.安装与卸载时检测程序如何改成单击是按钮关闭程序文件,并进入安装界面
2.单击否按钮则退出安装

以下是代码:

#define MyAppName "我的程序"
#define MyAppVersion "2.0.1.1"
#define MyAppPublisher "汉化新世纪"
#define MyAppURL "http://bbs.hanzify.org"
#define MyAppExeName "OneKey.exe"

[Files]
Source: "E:\本地下载\inno编译目录\{app}\ISTask.dll"; DestDir: "{app}"

[Setup]
; 注意: AppId 的值是唯一识别这个程序的标志。
; 不要在其他程序中使用相同的 AppId 值。
; (在编译器中点击菜单“工具 -> 产生 GUID”可以产生一个新的 GUID)
AppId={{93E3FDFE-E40D-43D0-BE5C-515FFA1E4DF7}
AppName=我的程序
AppVersion=1.5
;AppVerName=我的程序 1.5
AppPublisher=我的公司
AppPublisherURL=http://bbs.hanzify.org
AppSupportURL=http://bbs.hanzify.org
AppUpdatesURL=http://bbs.hanzify.org
DefaultDirName={pf}\我的程序
DefaultGroupName=我的程序
OutputDir=E:\本地下载\inno编译目录
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[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('OneKey.exe', false)then
  begin
    if MsgBox('安装程序检测到 OneKey.exe 正在运行!'#13''#13'单击“是”按钮关闭程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO)= IDYES then
      KillTask1('OneKey.exe');
end;
end;

function InitializeUninstall():Boolean;
begin
Result:= true;
  if RunTask('OneKey.exe', false)then
  begin
    if MsgBox('卸载程序检测到 OneKey.exe 正在运行!'#13''#13'单击“是”按钮关闭程序;'#13''#13'单击“否”按钮进行强制安装!', mbConfirmation, MB_YESNO)= IDYES then
      KillTask('OneKey.exe');
    UnloadDll(ExpandConstant('{app}\ISTask.dll'));
  end
end;




离线qiuquan

发帖
120
金钱
1200
威望
120
只看该作者 1 发表于: 01-08
用下面的代码就行了:

  1. [Setup]
  2. AppName=我的程序
  3. AppVersion=1.5
  4. DefaultDirName={pf}\我的程序
  5. [Files]
  6. Source: ISTask.dll; DestDir: {app}; Flags: solidbreak
  7. [Code]
  8. function RunTask1(FileName: string; bFullpath: Boolean): Boolean;
  9. external 'RunTask@files:ISTask.dll stdcall delayload';
  10. function KillTask1(ExeFileName: string): Integer;
  11. external 'KillTask@files:ISTask.dll stdcall delayload';
  12. function RunTask(FileName: string; bFullpath: Boolean): Boolean;
  13. external 'RunTask@{app}\ISTask.dll stdcall uninstallonly';
  14. function KillTask(ExeFileName: string): Integer;
  15. external 'KillTask@{app}\ISTask.dll stdcall uninstallonly';
  16. function InitializeSetup(): Boolean;
  17. begin
  18. Result:= true;
  19.   if RunTask1('taskmgr.exe', false) then
  20.     if MsgBox('检测到“任务管理器”正在运行,安装或卸载无法继续。 '#10#10'点单击「确定」强制关闭“任务管理器”并继续「下一步」,或按「取消」退出。',mbConfirmation, MB_OKCANCEL) = IDOK then
  21.     KillTask1('taskmgr.exe')
  22.     else begin
  23.     Result :=false;
  24.   end;
  25. end;
  26. function InitializeUninstall(): Boolean;
  27. begin
  28. Result:= true;
  29.   if RunTask('taskmgr.exe', false) then
  30.     if MsgBox('检测到“任务管理器”正在运行,安装或卸载无法继续。 '#10#10'点单击「确定」强制关闭“任务管理器”并继续「下一步」,或按「取消」退出。',mbConfirmation, MB_OKCANCEL) = IDOK then
  31.       KillTask('taskmgr.exe')
  32.     else begin
  33.       Result :=false;
  34.     end;
  35.     UnloadDll(ExpandConstant('{app}\ISTask.dll'))
  36. end;

离线wanfu

发帖
1782
金钱
2710
威望
271
只看该作者 2 发表于: 01-08
楼主,想不到你还是我们的会员啊。我前几天试用过你的这个软件,想不到无法监测到分区,结果又卸载了。我的系统是WIN7 x86 旗舰版,NTFS格式分区。
离线langhudaan

发帖
198
金钱
1980
威望
198
只看该作者 3 发表于: 01-10
WIN7下没试验过!