Inno Setup脚本

某天夜晚一场狂风暴雨,由于办公室座位旁的窗户没关,笔记本电脑泡了一夜水,无法开机,无奈送修,里面的大量资料也不知道会不会丢失。

is的脚本只有重新写了,重新研究了一下检测程序是否正在运行的判断方法,另外新增了限制安装程序重复开启的条件。还是在这里备份一下。

; 脚本由 Inno Setup 脚本向导 生成!
; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!

#define MyAppName "客服平台"
#define MyAppVersion "1.6.5"
#define MyAppPublisher "机构名"
#define MyAppURL "http://www.网站名.com/"
#define MyAppExeName "应用程序名.exe"

[Setup]
; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。)
AppId={{1B7F2E1D-F0D3-44D0-B460-61C4B0038784}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
VersionInfoProductVersion={#MyAppVersion}  
VersionInfoProductTextVersion={#MyAppVersion}  
VersionInfoVersion={#MyAppVersion}  
VersionInfoCompany={#MyAppPublisher}  
VersionInfoCopyright={#MyAppPublisher}{#'版权所有'}

DefaultDirName={pf}\ZestChat
DisableDirPage=yes
DisableProgramGroupPage=yes

OutputDir=D:\publish\Installer
OutputBaseFilename=ClientSetup
SetupIconFile=D:\......\图片名.ico
Compression=lzma
SolidCompression=yes

[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"

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

[CustomMessages]  
FinishedHeadingLabel=恭喜你,{#MyAppName}安装成功!  
FinishedLabel=安装程序已在您的电脑中安装了“{#MyAppName}”。此应用程序可以通过选择安装的快捷方式运行。%n%n单击 [完成(F)] 关闭安装程序。  
Tooltip={#MyAppName} {#MyAppVersion}  
TooltipText={#MyAppName}安装正在开始...  
MenuStrs=显示/隐藏  {#MyAppName} 安装程序;-;关于 {#MyAppName} ;-;退出 {#MyAppName} 安装

[Files]
Source: "D:\...\程序路径\...\bin\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[Code]
function InitializeSetup():boolean;
//var bResult:boolean;
var ErrorCode: Integer;  

begin
Result := true;      
//检测是否有另一个安装程序在运行  
//bResult :=  CheckForMutexes('MutexChatClientSetup');  
if CheckForMutexes('MutexChatClientSetup') then  
    begin  
       MsgBox('另一安装程序已经在运行,此安装程序将退出。',mbInformation,MB_OK);  
       Result := false;  
       Exit;  
    end 
else  
    begin  
        //没有就创建互斥量  
        CreateMutex('MutexChatClientSetup');
        if CheckForMutexes('自定义名称') then   //自定义名称在app.xaml.cs中为:_mutex = new Mutex(false, "ZestChatClient");
            begin
            if MsgBox('检测到客服端正在运行中!'#13'点击 "是" 关闭客服端继续安装;'#13'点击 "否" 退出安装程序!', mbConfirmation, MB_YESNO) = IDYES then
                begin
                    ShellExec('open', ExpandConstant('{cmd}'), '/c taskkill /f /t /im ChatClient.exe', '', SW_HIDE, ewNoWait, ErrorCode);
                    Result:= true;
               end
            else
               Result:= false;
            end
        else  
            Result := true;  
    end;  
end;

 

转载于:https://www.cnblogs.com/lionwang/p/9089765.html

### Inno Setup 脚本示例教程 #### 创建基本的安装包结构 为了创建一个简单的 Windows 应用程序安装包,Inno Setup 提供了一套完整的脚本框架来指定各种属性设置。这包括但不限于应用程序名称、版本号以及发布者信息等。 ```ini [Setup] AppName=My Application Name AppVersion=1.0 Author=Your Company or Your Name DefaultDirName={pf}\MyApplication OutputBaseFilename=myapplication_setup Compression=lzma SolidCompression=yes WizardImageFile=C:\Path\To\Image.bmp ; 可选参数用于自定义向导界面图片 ``` 上述代码片段展示了如何配置基础的应用元数据和压缩选项[^1]。 #### 添加文件到安装包中 接下来,在 `[Files]` 部分添加要被打包进安装程序中的文件列表: ```ini [Files] Source: "C:\Project\bin\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ; 上述命令会复制项目输出目录下所有的文件至目标位置 {app} ``` 这段指令说明了怎样把源路径里的所有子文件夹及其内容都加入最终生成的安装器里去。 #### 设置注册表项与开机启动功能 如果希望在用户计算机上写入某些特定键值或者实现随系统自动运行的功能,则可以在如下所示的部分完成相应设定: ```ini [Registry] Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "MyApp"; ValueData: """{app}\myprogram.exe""" ; 或者更具体地控制何时启用此行为: [Tasks] Name: autostart; Description: "&Launch My Program at startup"; GroupDescription: "Additional tasks:"; Flags: unchecked ``` 此处的例子演示了两种方法——直接编辑注册表或是让用户选择是否同意让该软件随着操作系统一同开启。 #### 执行额外的任务 有时还需要在安装期间或之后立即执行一些外部批处理文件或其他类型的可执行文件。这些可以通过下面的方式达成目的: ```ini [Run] Filename: "{app}\post_install_script.bat"; Description: "Running post-installation script..."; StatusMsg: "Executing additional setup steps."; Flags: nowait postinstall skipifsilent runhidden ``` 以上实例表明了当整个过程结束前一刻将会触发一次名为 `post_install_script.bat` 的批处理作业,并且不会等待它返回结果再继续下一步动作;同时也不会显示任何窗口给终端使用者看到正在发生什么变化[^2]。 #### 动态链接库 (DLL) 函数调用支持 对于更加复杂的场景来说,可能涉及到加载并调用第三方 DLL 中的方法。这时就需要利用 Pascal Scripting 来扩展原生能力范围之外的东西了: ```pascal [Code] function InitializeSetup(): Boolean; begin Result := True; try // 加载 dll 并获取函数指针 var hLib := LoadLibrary('example.dll'); if hLib <> 0 then begin var ProcAddr := GetProcAddress(hLib, 'ExampleFunction'); if Assigned(ProcAddr) then begin // 使用 TProcedure 类型变量间接调用入口点 var ExampleFunc : procedure() of object = TProcedure(ProcAddr); // 实际调用 ExampleFunc(); FreeLibrary(hLib); end; end; except on E: Exception do MsgBox(E.Message, mbError, MB_OK); end; end; ``` 这个例子介绍了如何编写一段能够安全导入共享对象并且成功调用其中公开接口的小段落[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值