; 脚本由 Inno Setup 脚本向导 生成! ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "慧教研扫描客户端" #define MyAppVersion "1.9.43" #define MyAppPublisher "SW" #define MyAppURL "https://www.jkydata.com/" #define MyAppExeName "HXX.Scanner.Starter.exe" [Setup] ; 注: AppId的值为单独标识该应用程序。 ; 不要为其他安装程序使用相同的AppId值。 ; (生成新的GUID,点击 工具|在IDE中生成GUID。) AppId={{84895A7B-88D1-4AB6-8382-6EF0E36850C8} AppName={#MyAppName} AppVersion={#MyAppVersion} AppVerName={#MyAppName} {#MyAppVersion} ;AppVerName=慧教研扫描客户端 AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={pf}\慧教研\{#MyAppName} DefaultGroupName=\慧教研\ DisableProgramGroupPage=yes ;LicenseFile=D:\packing\资源\安装协议2.txt OutputDir=D:\1 OutputBaseFilename=慧教研扫描客户端 安装程序 {#MyAppVersion} SetupIconFile=D:\packing\resource\desk.ico Compression=lzma SolidCompression=yes ShowLanguageDialog=no UninstallDisplayIcon={app}\卸载.ico VersionInfoVersion={#MyAppVersion} VersionInfoTextVersion={#MyAppVersion} VersionInfoCompany=慧教研 soft, Inc. VersionInfoCopyright=慧教研 soft, Inc. [Languages] Name: "chinesesimp"; MessagesFile: "compiler:Default.isl" ;Name: "english"; MessagesFile: "compiler:Languages\English.isl" [Tasks] ;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1 [Files] Source: "D:\packing\files\test\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs ;下面不动 Source: "D:\packing\资源\UpdateIcon.dll"; Flags: solidbreak dontcopy Source: "D:\packing\资源\卸载.ico"; DestDir: "{app}"; Flags: ignoreversion ; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion” [Icons] Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" ;Name: "{group}\{cm:UninstallProgram, {#MyAppName}}"; Filename: "{uninstallexe}"; IconFilename: C:\Users\Administrator\Desktop\打包\资源\卸载.ico Name: "{group}\卸载 {#MyAppName}"; Filename: "{uninstallexe}"; IconFilename: {app}\卸载.ico [Messages] ConfirmUninstall=您真的想要从电脑中卸载[慧教研扫描客户端]吗?%n%n按 [是] 则完全删除 %1 以及它的所有组件;%n按 [否]则让软件继续留在您的电脑上. [Registry] ;Root: HKLM ;SubKey:"SOFTWARE\Cobabys\ManageCloud";ValueType:dword;ValueName:INSTALL;ValueData:10 ;Flags:uninsdeletevalue Root: HKCR ;SubKey:"scannerClient";ValueType:string;ValueName:@;ValueData:"scannerClient" ;Flags:uninsdeletevalue Root: HKCR ;SubKey:"scannerClient";ValueType:string;ValueName:URL Protocol;ValueData:"" ;Flags:uninsdeletevalue Root: HKCR ;SubKey:"scannerClient\DefaultIcon";ValueType:string;ValueName:;ValueData:"{app}\{#MyAppExeName},1" ;Flags:uninsdeletevalue Root: HKCR ;SubKey:"scannerClient\Shell\Open\command";ValueType:string;ValueName:;ValueData:"""{app}\{#MyAppExeName}"" ""1%""";Flags:uninsdeletevalue Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType:string;ValueName:"{app}\{#MyAppExeName}";ValueData:"RUNASADMIN" [code] //插件函数用法 //参数: 句柄(插件错误对话框的父句柄), exe文件完整路径名称, (exe文件中要替换的)图标资源名称, 图标文件的完整路径名称, (exe中要替换的图标资源所在)语系 //返回值: 成功 = True, 失败 = False function UpdateIcon(const hWnd: Integer; const exeFileName, exeIcon, IcoFileName: String; wlangID: DWORD): Boolean; external 'UpdateIcon@files:UpdateIcon.dll stdcall'; //替换卸载程序的图标 function UpdateUninstIcon(const IcoFileName: String): Boolean; begin //要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标,其它参数类似! Result:= UpdateIcon(MainForm.Handle, '', '', IcoFileName, 0); //替换卸载图标 end; procedure CurStepChanged(CurStep: TSetupStep); var sIcon: String; var uninspath, uninsname, NewUninsName, MyAppName: string; begin ////////////////////////////////// //下面是修改卸载程序图标 ////////////////////////////////// //注意: 替换卸载程序的图标,必须是在卸载程序生成之前! //安装图标与卸载图标的格式与大小一致,否则可能会导致卸载程序出错! if CurStep=ssInstall then begin sIcon:= ExpandConstant('{tmp}\卸载.ico'); //定义卸载图标 ExtractTemporaryFile(ExtractFileName(sIcon)); //释放卸载图标 //要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标! UpdateUninstIcon(sIcon);//替换卸载图标 end; ////////////////////////////////// //下面是修改卸载程序名字 ////////////////////////////////// // if CurStep=ssDone then // begin // 指定新的卸载文件名(不包含扩展名),请相应修改! // NewUninsName := '卸载 库贝幼儿安全管理系统 服务端'; // 应用程序名称,与 [SEUTP] 段的 AppName 必须一致,请相应修改! // MyAppName := '{#MyAppName}'; // 以下重命名卸载文件 // uninspath:= ExtractFilePath(ExpandConstant('{uninstallexe}')); // uninsname:= Copy(ExtractFileName(ExpandConstant('{uninstallexe}')),1,8); // RenameFile(uninspath + uninsname + '.exe', uninspath + NewUninsName + '.exe'); // RenameFile(uninspath + uninsname + '.dat', uninspath + NewUninsName + '.dat'); // 以下修改相应的注册表内容 // if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/' + MyAppName + '_is1') then // begin // RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/' + MyAppName + '_is1', 'UninstallString', '"' + uninspath + NewUninsName + '.exe"'); // RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/' + MyAppName + '_is1', 'QuietUninstallString', '"' + uninspath + NewUninsName + '.exe" /SILENT'); // end; // end; end; function IsDotNetDetected(version: string; service: cardinal): boolean; // Indicates whether the specified version and service pack of the .NET Framework is installed. // // version -- Specify one of these strings for the required .NET Framework version: // 'v1.1' .NET Framework 1.1 // 'v2.0' .NET Framework 2.0 // 'v3.0' .NET Framework 3.0 // 'v3.5' .NET Framework 3.5 // 'v4\Client' .NET Framework 4.0 Client Profile // 'v4\Full' .NET Framework 4.0 Full Installation // 'v4.5' .NET Framework 4.5 // 'v4.5.1' .NET Framework 4.5.1 // 'v4.5.2' .NET Framework 4.5.2 // 'v4.6' .NET Framework 4.6 // 'v4.6.1' .NET Framework 4.6.1 // 'v4.6.2' .NET Framework 4.6.2 // 'v4.7' .NET Framework 4.7 // 'v4.7.1' .NET Framework 4.7.1 // 'v4.7.2' .NET Framework 4.7.2 // 'v4.8' .NET Framework 4.8 // // service -- Specify any non-negative integer for the required service pack level: // 0 No service packs required // 1, 2, etc. Service pack 1, 2, etc. required var key, versionKey: string; install, release, serviceCount, versionRelease: cardinal; success: boolean; begin versionKey := version; versionRelease := 0; // .NET 1.1 and 2.0 embed release number in version key if version = 'v1.1' then begin versionKey := 'v1.1.4322'; end else if version = 'v2.0' then begin versionKey := 'v2.0.50727'; end // .NET 4.5 and newer install as update to .NET 4.0 Full else if Pos('v4.', version) = 1 then begin versionKey := 'v4\Full'; case version of 'v4.5': versionRelease := 378389; 'v4.5.1': versionRelease := 378675; // 378758 on Windows 8 and older 'v4.5.2': versionRelease := 379893; 'v4.6': versionRelease := 393295; // 393297 on Windows 8.1 and older 'v4.6.1': versionRelease := 394254; // 394271 before Win10 November Update 'v4.6.2': versionRelease := 394802; // 394806 before Win10 Anniversary Update 'v4.7': versionRelease := 460798; // 460805 before Win10 Creators Update 'v4.7.1': versionRelease := 461308; // 461310 before Win10 Fall Creators Update 'v4.7.2': versionRelease := 461808; // 461814 before Win10 April 2018 Update 'v4.8': versionRelease := 528040; // 528049 before Win10 May 2019 Update end; end; // installation key group for all .NET versions key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + versionKey; // .NET 3.0 uses value InstallSuccess in subkey Setup if Pos('v3.0', version) = 1 then begin success := RegQueryDWordValue(HKLM, key + '\Setup', 'InstallSuccess', install); end else begin success := RegQueryDWordValue(HKLM, key, 'Install', install); end; // .NET 4.0 and newer use value Servicing instead of SP if Pos('v4', version) = 1 then begin success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount); end else begin success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount); end; // .NET 4.5 and newer use additional value Release if versionRelease > 0 then begin success := success and RegQueryDWordValue(HKLM, key, 'Release', release); success := success and (release >= versionRelease); end; result := success and (install = 1) and (serviceCount >= service); end; ////////////////////////////////// //检测.NET环境,检测程序是否安装过 ////////////////////////////////// function InitializeSetup: Boolean; //声明变量 // var Isbl: boolean; // var Isstr: string; var Path: string; url:string; ResultCode: Integer; begin ////////////////////////////////// //检测.NET环境 ////////////////////////////////// Result := true; if(not IsDotNetDetected('v4.6.1',0)) then begin url := 'https://oss.jkydata.com/000000/NDP461-KB3102436-x86-x64-AllOS-ENU.exe' Path := ExpandConstant('{pf}/Internet Explorer/iexplore.exe'); Exec(Path, url , '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode); MsgBox('请安装好.Net Framework 4.6.1环境后,再运行本安装包程序!',mbInformation,MB_OK); Result := false; end // if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\v4.0') then // begin // Result := true; // MsgBox('aabb',mbInformation,MB_OK); // end // else // begin // MsgBox('请安装.Net Framework 4.6环境!',mbInformation,MB_OK); // Result := false; // end; ////////////////////////////////// //检测程序是否安装过 ////////////////////////////////// // 注意下方要与安装时创建的注册表信息一致 // begin // Isbl := true; // Isstr := '欢迎'; // if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Cobabys\ManageCloud', 'INSTALL') then // begin // MsgBox('软件已安装过,如果需要重新安装,请先卸载再安装!',mbConfirmation, MB_OK); // isbl := false; // end; // // Result := Isbl; // end; end;