• Inno Setup打包的exe程序加上【unins.exe】卸载程序


    之前做了一个exe程序,用inno打包好了后,发现不方便卸载。看到其他程序都有unins.exe卸载程序之类的。于是在网上找了找,修改了格式问题,并测试成功。这里记录一下

    • 主要是在inno脚本里添加几处语句(已经标记了注释,请细看)
    ; Script generated by the Inno Setup Script Wizard.
    ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
    
    #define MyAppName "boc-plug"
    #define MyAppVersion "1.5"
    #define MyAppPublisher "My Company, Inc."
    #define MyAppURL "https://www.example.com/"
    #define MyAppExeName "boc-plug.exe"
    #define MyAppAssocName MyAppName + ""
    #define MyAppAssocExt ".exe"
    #define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt
    
    [Setup]
    ; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
    ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
    AppId={{D9A40C54-DC21-428E-A915-D7543C860765}
    AppName={#MyAppName}
    AppVersion={#MyAppVersion}
    ;AppVerName={#MyAppName} {#MyAppVersion}
    AppPublisher={#MyAppPublisher}
    AppPublisherURL={#MyAppURL}
    AppSupportURL={#MyAppURL}
    AppUpdatesURL={#MyAppURL}
    DefaultDirName={autopf}\{#MyAppName}
    ChangesAssociations=yes
    DisableProgramGroupPage=yes
    LicenseFile=D:\workdoc\中国银行金库\jinku\code\buildexe\0926\exe\1.txt
    InfoBeforeFile=D:\workdoc\中国银行金库\jinku\code\buildexe\0926\exe\2.txt
    InfoAfterFile=D:\workdoc\中国银行金库\jinku\code\buildexe\0926\exe\3.txt
    ; Uncomment the following line to run in non administrative install mode (install for current user only.)
    ;PrivilegesRequired=lowest
    OutputDir=D:\workdoc\中国银行金库\jinku\code\buildexe\0926\out
    OutputBaseFilename=boc-setup
    Compression=lzma
    SolidCompression=yes
    WizardStyle=modern
    
    // 下面两句,如果你的脚本里没有,添加上,直接复制
    Uninstallable=yes
    UninstallDisplayName=卸载{#MyAppName}
    
    [Languages]
    Name: "english"; MessagesFile: "compiler:Default.isl"
    
    [Tasks]
    Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
    
    [Files]
    Source: "D:\workdoc\中国银行金库\jinku\code\buildexe\0926\exep2\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:\workdoc\中国银行金库\jinku\code\buildexe\0926\exep2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
    ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
    
    // 下面[code]到[Registry]之间的内容直接复制到你的脚本里
    [code]
      function InitializeSetup: Boolean;
      var Isbl: boolean;         //声明变量
        var Isstr: string;
        //全局变量
        var MyProgChecked: Boolean;
      var Path:string ;
             ResultCode: Integer;
      begin
        if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v2.0') then
          begin
             Result := true;
         end
        else
          begin
            if MsgBox('系统检测到您没有安装.Net Framework2.0,是否立刻下载并安装?', mbConfirmation, MB_YESNO) = idYes then
              begin
                   Path := ExpandConstant('{pf}\Internet Explorer\iexplore.exe');
                   Exec(Path, 'http://data.zhiluo.net/soft/Microsoft_DotNet2.0.rar', '' , SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
                   MsgBox('请安装好.Net Framework2.0环境后,再运行本安装包程序!',mbInformation,MB_OK);
                   Result := false;
               end
            else
               begin
                   MsgBox('没有安装.Net Framework2.0环境,无法运行程序,本安装程序即将退出!',mbInformation,MB_OK);
                   Result := false;
               end;
          end;
    
          begin       //开始
            Isbl := true;             //变量赋值  注意下方的“SOFTWARE\IT_soft”要与安装时创建的注册表信息一致
            Isstr := '欢迎';
            if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\IT_soft', 'config') then
              begin
                MsgBox('软件已安装过,如果需要重新安装,请先卸载再安装!',mbConfirmation, MB_OK);
                isbl := false;
              end
            else
              begin
              //MsgBox(‘无值‘,mbConfirmation, MB_OK);
              isbl := true;
              end;
              Result := Isbl;
          end;       //结束
      end;
    
    [Registry]
    Root: HKA; Subkey: "Software\Classes\{#MyAppAssocExt}\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocKey}"; ValueData: ""; Flags: uninsdeletevalue
    Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}"; ValueType: string; ValueName: ""; ValueData: "{#MyAppAssocName}"; Flags: uninsdeletekey
    Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName},0"
    Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""
    Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".myp"; ValueData: ""
    
    [Icons]
    Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
    Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
    // 下面这句需要添加
    Name: "{group}\卸载 {#MyAppName}"; Filename: "{uninstallexe}"
    
    [Run]
    Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
    
    
    
  • 相关阅读:
    逮到一个阿里10年老测试员,聊过之后收益良多...
    c语言中为什么函数传参大多数用指针类型
    047_第三代软件开发-日志分离
    TFT-eSPI入门使用教程
    JWT安全
    压力山大题
    关于kunit的一点够用就行知识概念
    vue生成动态表单
    python中的函数递归
    缓存的放置时间和删除时间
  • 原文地址:https://blog.csdn.net/qq_31424825/article/details/127071742