首页 > 其他分享 >innoSetup打包文件编写模板(二):支持覆盖安装,安装前关闭运行,避免安装失败

innoSetup打包文件编写模板(二):支持覆盖安装,安装前关闭运行,避免安装失败

时间:2024-12-28 17:20:58浏览次数:6  
标签:begin end Name app innoSetup languageName ExpandConstant 安装 模板

 

1.支持重复安装

2.安装前关闭程序,避免覆盖失败

3.卸载前关闭程序,避免卸载失败

 

重点:使用终端命名杀死进程

ShellExec('open', ExpandConstant('{cmd}'), '/c taskkill /f /t /im hp.exe', '', SW_HIDE, ewNoWait, ErrorCode);

 

 

; 自定义的宏,方便后期维护
#define MyAppName "HP DocCam"
#define MyAppVersion "V1.0"
#define MyAppExeName "hp.exe"
#define MyAppPublisher "HP DocCam Huyang"

[Setup]
AppId={{F382DAB1-E185-41EF-B6ED-32E86CC310HU-HP-DocCam}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}

; 发布者 - 安装包文件版本 - 版权 
AppPublisher={#MyAppPublisher}
VersionInfoVersion=1.0
VersionInfoCopyright={#MyAppPublisher}

; 默认安装文件夹路径
;DefaultDirName={pf}\{#MyAppName}
DefaultDirName={commonpf64}\{#MyAppName}

; 默认组名称,开始菜单中会用到这个名称
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes

; 打包后安装包的保存路径 - 打包后安装包的名称
OutputDir=output
OutputBaseFilename={#MyAppName} {#MyAppVersion}-d


Compression=lzma
SolidCompression=yes

; 允许重复安装
UsePreviousAppDir=yes

; 安装包图标 & 卸载程序图标
SetupIconFile = Release\logo.ico
UninstallIconFile = Release\logo.ico

; 控制面板
UninstallDisplayIcon = {app}\logo.ico
Uninstallable=yes
UninstallDisplayName={#MyAppName}

; 签名
;SignTool=sha1
;SignTool=sha256

[Languages]
Name: "English"; MessagesFile: "compiler:Languages\English.isl"
Name: "chinesesimp"; MessagesFile: "compiler:Languages\ChineseSimp.isl"
Name: "ChineseTrad"; MessagesFile: "compiler:Languages\ChineseTrad.isl"
Name: "French"; MessagesFile: "compiler:Languages\French.isl"
Name: "German"; MessagesFile: "compiler:Languages\German.isl"
Name: "Spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "Portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl"
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "Italian"; MessagesFile: "compiler:Languages\Italian.isl"
Name: "Greek"; MessagesFile: "compiler:Languages\Greek.isl"
Name: "Japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
Name: "Korean"; MessagesFile: "compiler:Languages\Korean.isl"


[Tasks]
;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone

[Files]
; exe
Source: "Release\hp.exe"; DestDir: "{app}"; Flags: ignoreversion

; flt & ini
Source: "Release\video.flt"; DestDir: "{app}"; Flags: ignoreversion

; 图标
Source: "Release\logo.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: "Release\logo.png"; DestDir: "{app}"; Flags: ignoreversion

; dll
Source: "Release\*.dll"; DestDir: "{app}"; Flags: ignoreversion

; 文件夹
Source: "Release\iconengines\*"; DestDir: "{app}\iconengines"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "Release\imageformats\*"; DestDir: "{app}\imageformats"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "Release\platforms\*"; DestDir: "{app}\platforms"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "Release\styles\*"; DestDir: "{app}\styles"; Flags: ignoreversion recursesubdirs createallsubdirs


[INI]
;良田版,中文,不打开控制台
Filename: "{userappdata}\Eloam\Cfg\lib.ini"; Section: "EL";Key: "consoleLevel"; String: "0" ;


[Registry]
Root: HKLM; Subkey: Software\VisualPresent; ValueType: string; ValueName: huyangHPDocCam; ValueData: '123456'; Flags: uninsdeletekey


; 解决重复安装
[code]
// 根据用户选择的语言,设置软件配置文件,用来显示对应的语言
procedure CurStepChanged(CurStep: TSetupStep); 
var
  languageName: string;
begin
  if CurStep=ssDone  then    //软件安装后执行
  begin
    languageName := ActiveLanguage(); // 获取用户选择的语言
    if 'chinesesimp' = languageName then
    begin
      SetIniString('dev','softwarelanguage','0',ExpandConstant('{app}\conf.ini'));
    end 
    else if 'ChineseTrad' = languageName then
    begin
      SetIniString('dev','softwarelanguage','1',ExpandConstant('{app}\conf.ini'));
    end
    else if 'English' = languageName then
    begin
      SetIniString('dev','softwarelanguage','2',ExpandConstant('{app}\conf.ini'));
    end 
    else if 'French' = languageName then
    begin
      SetIniString('dev','softwarelanguage','3',ExpandConstant('{app}\conf.ini'));
    end 
    else if 'German' = languageName then
    begin
      SetIniString('dev','softwarelanguage','4',ExpandConstant('{app}\conf.ini'));
    end 
    else if 'Spanish' = languageName then
    begin
      SetIniString('dev','softwarelanguage','5',ExpandConstant('{app}\conf.ini'));
    end 
    else if 'Portuguese' = languageName then
    begin
      SetIniString('dev','softwarelanguage','6',ExpandConstant('{app}\conf.ini'));
    end 
    else if 'Russian' = languageName then
    begin
      SetIniString('dev','softwarelanguage','7',ExpandConstant('{app}\conf.ini'));
    end 
    else if 'Italian' = languageName then
    begin
      SetIniString('dev','softwarelanguage','8',ExpandConstant('{app}\conf.ini'));
    end 
    else if 'Greek' = languageName then
    begin
      SetIniString('dev','softwarelanguage','9',ExpandConstant('{app}\conf.ini'));
    end 
    else if 'Japanese' = languageName then
    begin
      SetIniString('dev','softwarelanguage','10',ExpandConstant('{app}\conf.ini'));
    end 
    else if 'Korean' = languageName then
    begin
      SetIniString('dev','softwarelanguage','11',ExpandConstant('{app}\conf.ini'));
    end;    
  end; 
end;


// 安装前检查软件是否正在运行,
function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;
begin
    ShellExec('open', ExpandConstant('{cmd}'), '/c taskkill /f /t /im hp.exe', '', SW_HIDE, ewNoWait, ErrorCode);
    Result := True;
end;

// 卸载前检查软件是否正在运行
function InitializeUninstall(): Boolean;
var
  ErrorCode: Integer;
begin
    ShellExec('open', ExpandConstant('{cmd}'), '/c taskkill /f /t /im hp.exe', '', SW_HIDE, ewNoWait, ErrorCode);
    Result := True;
end;



[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\logo.ico"
Name: "{group}\{cm:UninstallProgram, {#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename:"{app}\logo.ico"


[Run]
Filename: "{app}\MJPGDriver.exe"; Parameters: "/verysilent /norestart"; Description: "{cm:LaunchProgram, MJPGDriver}"; Flags:postinstall  waituntilterminated  skipifsilent
;Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

 

标签:begin,end,Name,app,innoSetup,languageName,ExpandConstant,安装,模板
From: https://www.cnblogs.com/shiyixirui/p/18637687

相关文章

  • Julia疑难杂症专栏 | 安装问题汇总及其解决方案,从环境配置到结果验证,深度学习、科学
      1.下载慢的问题使用端口问题2.下载慢的问题,设置镜像源加快速度3.一般的安装问题4.STATA+julia5.Vscode+julia6.Jupyter+julia7.Julia引入PyCall或者PyPlot报错卡顿8.彻底删除包的方法9.Pkg.add("某个包")出现权限问题permissiondenied(EACCES)10.M......
  • 原生模板 广告
    原生模板广告小程序广告流量主操作指引:文档地址开发者可以使用ad-custom组件创建原生模板广告组件,原生模板广告组件在创建后会自动拉取广告数据并显示。广告尺寸设置原生模板广告不允许直接设置样式属性,默认宽度为100%(width:100%),高度会自动等比例计算,因此开发者可以设......
  • MySQL安装配置教程(非常详细),从零基础入门到精通,看完这一篇就够了
    Windows下有两种安装MySQL的方式:图形界面安装(.msi文件)免安装版(.zip压缩文件)MySQL下载官网:http://www.mysql.com也可前往百度网盘提取(两种安装方式文件都有):链接:https://pan.baidu.com/s/1NMRUu_E098h4ErzSXTUKgA提取码:3tfb一、MySQL免安装版配置教程http://c.bianche......
  • Wireshark安装入门教程(非常详细),从零基础入门到精通,看完这一篇就够了
    简介wireshark是非常流行的网络封包分析工具,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。wireshark能获取HTTP,也能获......
  • 【更新至2025年新版本】超详细PyCharm安装教程及基本使用!
    PyCharm是一款PythonIDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如,调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。文章目录一、P......
  • FreeSWITCH的功能、架构、协议、场景、安装、商业化一览
    FreeSWITCH的功能、架构、协议、场景、安装、商业化一览作者:基于Java与FreeSWITCH的开源呼叫中心系统FreeIPCC,Github地址:https://github.com/FreeIPCC/FreeAICCFreeSWITCH的功能、架构、协议、场景、安装与商业化一、FreeSWITCH的功能FreeSWITCH是一个开源的电话软交换平台......
  • 【Windows】 国内安装Scoop包管理器(镜像加速)
    由于国内github访问不通畅,且多数开源软件托管在github,导致scoop体验极差,甚至安装Scoop这一步都无法进行。国内有位作者将scoop主程序托管在gitee,增加分流逻辑处理安装与更新所涉及的资源。链接:https://gitee.com/scoop-installer/scoop安装scoop主程序1.1初次安装(第一次在电......
  • Git 安装配置
    在使用Git前我们需要先安装Git。Git目前支持Linux/Unix、Solaris、Mac和Windows平台上运行。Git各平台安装包下载地址为:http://git-scm.com/downloadsLinux平台上安装各大Linux平台可以使用包管理器(apt-get、yum等)进行安装。Debian/UbuntuGit安装最新稳......
  • 基于HTML的手机商城静态模板
    计算机毕业设计案例Java毕业设计案例ASP.NET毕业设计案例PHP毕业设计案例微信小程序毕业设计案例基于Java后台的个人财务管理系统微信小程序基于c#的舞蹈教学网站基于PHP的医院出院患者满意度调查系统的设计与实现基于Java后台的二手交易小程序的设计与实现-2025计算机毕......
  • DBeaver 23 免费版下载及安装破解教程
    DBeaver简介DBeaver是一个SQL客户端和数据库管理工具。对于关系数据库,它使用JDBCAPI通过JDBC驱动程序与数据库交互。对于其他数据库(NoSQL),它使用专有数据库驱动程序。它提供了一个编辑器,支持代码完成和语法高亮。它提供了一种插件体系结构(基于Eclipse插件体系结构),允许用户修改应......