inno setup脚本,涵盖了自定义安装界面,调用dll等等应用

; Script generated by the Inno Setup 脚本向导.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

; 为1的时候表示定义成试用版本
#define VERSION_TYPE ReadIni(‘Setup.ini‘, ‘SetupType‘, ‘type‘, ‘0‘)

#if VERSION_TYPE == "2"
    #define LIVE_VERSION
    #define MyAppName "流媒体系统(PMS)"
    #define MyAppId "1954A698-2322-46F1-B732-8DDF96693DA5"
    #define MyOutputBaseFilename "live_server_setup"
#elif VERSION_TYPE == "1"
    #define VOD_VERSION
    #define MyAppName "流媒体系统(PMS)"
    #define MyAppId "DA255679-F103-4170-8B75-B9A7EF4CBC1B"
    #define MyOutputBaseFilename "vod_server_setup"
#else
    #define FULL_VERSION
    #define MyAppName "流媒体系统(PMS)"
    #define MyAppId "4AC618B5-8C69-4D47-918A-261AA895B6D7"
    #define MyOutputBaseFilename "full_server_setup"
#endif

#define RegUrl "http://www.xxx.net"
#define MyAppVersion "1.0"
#define MyAppPublisher "XXX科技有限公司"
#define MyAppURL "http://www.xxx.net"
#define MyAppExeName "InstanceConfig.exe"

[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={{{#MyAppId}}
AppMutex={{{#MyAppId}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\xxx\media server
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
LicenseFile=license.txt
OutputDir=output
OutputBaseFilename={#MyOutputBaseFilename}
SetupIconFile=setup.ico
Compression=lzma
SolidCompression=yes

VersionInfoVersion={#MyAppVersion}
VersionInfoCompany={#MyAppPublisher}
VersionInfoCopyright=Copyright (C) 2010-2013
VersionInfoProductName={#MyAppName}
VersionInfoProductVersion={#MyAppVersion}

[Languages]
Name: cn; MessagesFile: compiler:Languages\chinese.isl

[Files]
; NOTE: Don‘t use "Flags: ignoreversion" on any shared system files
; 用来检测安装程序中输入的注册码是否有效
Source: ..\build\register_help.dll; Flags: dontcopy
Source: ..\build\libeay32.dll; Flags: dontcopy
Source: ..\build\vcredist2008_x86.exe; Flags: dontcopy

#ifdef FULL_VERSION
Source: ..\build\server.conf; DestDir: {app}
Source: ..\build\media_service.exe; DestDir: {app}
Source: ..\build\libmysql.dll; DestDir: {app}
Source: ..\build\libeay32.dll; DestDir: {app}
Source: ..\build\zlib1.dll; DestDir: {app}
Source: ..\build\register_check.exe; DestDir: {app}
Source: ..\build\QtCore4.dll; DestDir: {app}
Source: ..\build\QtGui4.dll; DestDir: {app}
Source: ..\build\mglobal.dll; DestDir: {app}
Source: ..\build\msvcp100.dll; DestDir: {app}
Source: ..\build\msvcr100.dll; DestDir: {app}
Source: ..\build\initconfig.exe; DestDir: {app}
Source: ..\build\InstanceConfig.exe; DestDir: {app}
;Source: ..\build\php-fpm.exe; DestDir: {app}
Source: ..\build\管理统计页面.url; DestDir: {app}
Source: ..\build\示例页面.url; DestDir: {app}

Source: ..\build\launchlist; DestDir: {app}
;Source: ..\build\phpcgi; DestDir: {app}

Source: ..\build\lighttpd.conf; DestDir: {app}\lmp\lighttpd\conf; Flags: ignoreversion
Source: ..\build\my.ini; DestDir: {app}\lmp\mysql; Flags: ignoreversion

; web服务器整套目录
Source: ..\build\lmp\*; DestDir: {app}\lmp; Flags: recursesubdirs createallsubdirs
; doc文档目录
Source: ..\doc\*; DestDir: {app}\help; Flags: recursesubdirs createallsubdirs
; 播放器相关目录
Source: ..\build\swfs\*; DestDir: {app}\swfs; Flags: recursesubdirs createallsubdirs
; 播放器SDK相关目录
Source: ..\build\scriptlib\*; DestDir: {app}\scriptlib; Flags: recursesubdirs createallsubdirs

#endif

[Dirs]
Name: {app}\videos

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

[Icons]
Name: {group}\sample\示例页面; Filename: {app}\示例页面.url

Name: {group}\help\安装说明; Filename: {app}\help\安装说明.pdf
Name: {group}\help\功能说明; Filename: {app}\help\功能说明.pdf
Name: {group}\help\开发说明; Filename: {app}\help\开发说明.pdf
Name: {group}\help\配置说明; Filename: {app}\help\配置说明.pdf
Name: {group}\help\统计模块; Filename: {app}\help\统计模块.pdf

Name: {group}\流媒体系统(PMS)系统配置; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:UninstallProgram, PMS系统配置}; Filename: {uninstallexe}
Name: {group}\流媒体系统(PMS)统计管理; Filename: {app}\管理统计页面.url; IconFilename: {app}\{#MyAppExeName};
Name: {commondesktop}\流媒体系统(PMS)统计管理; Filename: {app}\管理统计页面.url; Tasks: desktopicon; IconFilename: {app}\{#MyAppExeName};
Name: {commondesktop}\流媒体系统(PMS)系统配置; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
Name: {commondesktop}\开启PMS服务; Filename: {app}\media_service.exe; Parameters: -r; IconFilename: {app}\{#MyAppExeName}; Tasks: desktopicon
Name: {commondesktop}\停止PMS服务; Filename: {app}\media_service.exe; Parameters: -s; IconFilename: {app}\{#MyAppExeName}; Tasks: desktopicon

[Run]
; 删除服务
Filename: {app}\media_service.exe; Parameters: -u; Flags: runhidden
; 安装服务
Filename: {app}\media_service.exe; Parameters: -i; Flags: runhidden

[UninstallRun]
; 停止服务
Filename: {app}\media_service.exe; Parameters: -s; Flags: runhidden
; 删除服务
Filename: {app}\media_service.exe; Parameters: -u; Flags: runhidden

[CustomMessages]
Key_Form_Caption=注册向导
Key_Form_Description=将序列号提交给xxx以获取注册码
Key_Form_codeLabel_Caption0=序列号:
Key_Form_keyLabel_Caption0=注册码:

Domain_Form_Caption=域名设置
Domain_Form_Description=配置当前服务器域名

[Messages]
BeveledLabel=xxx网络科技

[Code]
var
    codeLabel: TLabel;
    keyLabel: TLabel;
    key: TMemo;
    code: TMemo;
  keyPage: TWizardPage;
  domainEdit: TNewEdit;
  domainPage: TWizardPage;

// 获取序列号
function getCode(szCode: PChar; inLen: Integer): Integer;
external ‘[email protected]:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath‘;

// 进行检查
function regCheck(const regKey: PChar): Boolean;
external ‘[email protected]:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath‘;

// 进行注册
function regSave(const regKey, regPath: PChar): Boolean;
external ‘[email protected]:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath‘;

// 清理注册
procedure regClear(const regPath: PChar);
external ‘[email protected]:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath‘;

function OpenSCManager(const machine: LongInt; const dbName: LongInt;  access: Dword):LongInt;
external ‘[email protected] stdcall‘;

function OpenService(svcMgr: LongInt; const svcName: pchar;  access: Dword):LongInt;
external ‘[email protected] stdcall‘;

function CloseServiceHandle(svc: LongInt):Boolean;
external ‘[email protected] stdcall‘;

///判定服务是否存在
function  serviceExists(name: string): boolean;
var
    SvcMgr, Svc: LongInt;
begin
    Result := False;
    SvcMgr := OpenSCManager(0,0,1);
    if SvcMgr = 0 then Exit;
    Svc := OpenService(SvcMgr, PChar(name), 4);
    if Svc = 0 then
    begin
      CloseServiceHandle(SvcMgr);
      Exit;
    end;
    CloseServiceHandle(Svc);
    CloseServiceHandle(SvcMgr);
    Result := true;
end;

///停止服务
procedure stopService;
var
  ResultCode: Integer;
begin
  Exec(ExpandConstant(‘{tmp}\media_service.exe‘), ‘-s‘, ‘‘, SW_HIDE, ewWaitUntilTerminated, ResultCode);
end;

{ Key_Form_ShouldSkipPage }

function Key_Form_ShouldSkipPage(Page: TWizardPage): Boolean;
var
    codeStr: String;
begin
    SetLength(codeStr, 1024);
    getCode(PChar(codeStr), 1024);
    code.Text := codeStr;
    Result := False;
end;

// 注册码编辑框改变事件
procedure Key_Form_KeyChange(Sender: TObject);
begin
// 检测注册码
    if regCheck(PChar(key.Text)) then
        WizardForm.NextButton.Enabled := True
    else
        WizardForm.NextButton.Enabled := False;
end;

procedure RegURLLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec(‘open‘, ExpandConstant(‘{#RegURL}‘), ‘‘, ‘‘, SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

{ Key_Form_CreatePage }
function Key_Form_CreatePage(PreviousPageId: Integer): Integer;
var
  URLLabel: TNewStaticText;
begin
    keyPage := CreateCustomPage(
              PreviousPageId,
              ExpandConstant(‘{cm:Key_Form_Caption}‘),
              ExpandConstant(‘{cm:Key_Form_Description}‘)
          );

  { codeLabel }
    codeLabel := TLabel.Create(keyPage);
    with codeLabel do
    begin
        Parent := keyPage.Surface;
        Caption := ExpandConstant(‘{cm:Key_Form_codeLabel_Caption0}‘);
        Left := ScaleX(0);
        Top := ScaleY(0);
        Width := ScaleX(40);
        Height := ScaleY(13);
    end;

  { keyLabel }
    keyLabel := TLabel.Create(keyPage);
    with keyLabel do
    begin
        Parent := keyPage.Surface;
        Caption := ExpandConstant(‘{cm:Key_Form_keyLabel_Caption0}‘);
        Left := ScaleX(0);
        Top := ScaleY(82);
        Width := ScaleX(40);
        Height := ScaleY(13);
    end;

  { key }
    key := TMemo.Create(keyPage);
    with key do
    begin
        Parent := keyPage.Surface;
        Left := ScaleX(0);
        Top := ScaleY(98);
        Width := ScaleX(410);
        Height := ScaleY(106);
        ScrollBars := ssVertical;
        TabOrder := 0;
    OnChange := @Key_Form_KeyChange;
    end;

  { code }
    code := TMemo.Create(keyPage);
    with code do
    begin
        Parent := keyPage.Surface;
        Left := ScaleX(0);
        Top := ScaleY(16);
        Width := ScaleX(410);
        Height := ScaleY(60);
        ReadOnly := True;
        ScrollBars := ssVertical;
        TabOrder := 1;
    end;

    with keyPage do
    begin
        OnShouldSkipPage := @Key_Form_ShouldSkipPage;
    end;

    Result := keyPage.ID;

  URLLabel := TNewStaticText.Create(keyPage);
  with URLLabel do
  begin
    Caption := ‘获取注册码‘;
    Cursor := crHand;
    OnClick := @RegURLLabelOnClick;
    Parent := keyPage.Surface;
    Font.Style := URLLabel.Font.Style + [fsUnderline];
    Font.Color := clBlue;
    Left := ScaleX(350);
    Top := ScaleY(210);
  end;
end;

{ 设置域名页面相关代码 }
procedure Domain_Form_EditChange(sender: TObject);
begin
  if domainEdit.Text = ‘‘ then
    WizardForm.NextButton.Enabled := False
  else
    WizardForm.NextButton.Enabled := True;
end;

function Domain_Form_CreatePage(PreviousPageId: Integer): Integer;
var
  domainLabel: TNewStaticText;
begin
    domainPage := CreateCustomPage(
              PreviousPageId,
              ExpandConstant(‘{cm:Domain_Form_Caption}‘),
              ExpandConstant(‘{cm:Domain_Form_Description}‘)
          );

  domainLabel := TNewStaticText.Create(domainPage);
  with domainLabel do
  begin
    Parent := domainPage.Surface;
    Caption := ‘请确保输入的域名是有效的,并指向当前服务器IP,否则可以直接填写本机‘ + #13#10 + ‘IP地址,或者保持默认值不变‘;
        Left := ScaleX(0);
        Top := ScaleY(60);
        Width := ScaleX(400);
        Height := ScaleY(28);
  end;

  domainEdit := TNewEdit.Create(domainPage);
  with domainEdit do
  begin
    Parent := domainPage.Surface;
    Text := GetComputerNameString;
        Left := ScaleX(0);
        Top := ScaleY(90);
        Width := ScaleX(400);
        Height := ScaleY(13);
    OnChange := @Domain_Form_EditChange;
  end;
end;

procedure URLLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec(‘open‘, ExpandConstant(‘{#MyAppURL}‘), ‘‘, ‘‘, SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

// 安装初始化
function InitializeSetup(): Boolean;
begin
  if serviceExists(‘MediaSrv‘) then
  begin //服务存在,先停止它
    if MsgBox(‘服务已经存在,要继续吗?‘, mbConfirmation, MB_YESNO) = IDNO then
    begin
      Result := False;
      Exit;
    end;
    ExtractTemporaryFile(‘media_service.exe‘);
    ExtractTemporaryFile(‘msvcr100.dll‘);
    ExtractTemporaryFile(‘msvcp100.dll‘);
    stopService;
  end;
    result := True;
end;

procedure InitializeWizard();
var
  URLLabel: TNewStaticText;
begin
    Key_Form_CreatePage(wpSelectDir);
  Domain_Form_CreatePage(keyPage.ID);

  URLLabel := TNewStaticText.Create(WizardForm);
  with URLLabel do
  begin
    Caption := ExpandConstant(‘{#MyAppURL}‘);
    Cursor := crHand;
    OnClick := @URLLabelOnClick;
    Parent := WizardForm;
    Font.Style := URLLabel.Font.Style + [fsUnderline];
    Font.Color := clBlue;
    Left := ScaleX(20);
    Top := WizardForm.ClientHeight - ScaleY(30);
  end;
end;

// 页面切换事件
procedure CurPageChanged(CurPageID: Integer);
var
  ResultCode: Integer;
  file: String;
  buf: String;
begin
  WizardForm.BackButton.Enabled := True;

  if CurPageID = keyPage.ID then
    WizardForm.NextButton.Enabled := False
  else if CurPageID = wpFinished then
  begin
    ///////////////////////////////////////////////////////////
    // 帮助设置HOST_NAME为用户设置的域名
    file := ExpandConstant(‘{app}\lmp\htdocs\sample\config.php‘);
    if LoadStringFromFile(file, buf) then
    begin
      StringChangeEx(buf, ‘%HOST_NAME%‘, domainEdit.Text, False);
      SaveStringToFile(file, buf, False);
    end;

    file := ExpandConstant(‘{app}\管理统计页面.url‘);
    if LoadStringFromFile(file, buf) then
    begin
      StringChangeEx(buf, ‘%HOST_NAME%‘, domainEdit.Text, False);
      SaveStringToFile(file, buf, False);
    end;

    file := ExpandConstant(‘{app}\示例页面.url‘);
    if LoadStringFromFile(file, buf) then
    begin
      StringChangeEx(buf, ‘%HOST_NAME%‘, domainEdit.Text, False);
      SaveStringToFile(file, buf, False);
    end;
    ///////////////////////////////////////////////////////////

    // 禁用完成按钮
    WizardForm.NextButton.Enabled := False;
    // 正式写入注册文件
    regSave(PChar(key.Text), WizardDirValue);
    // 执行自动初始化
    Exec(ExpandConstant(‘{app}\initconfig.exe‘), ‘‘, ‘‘, SW_HIDE, ewWaitUntilTerminated, ResultCode);
    // 执行配置设置
    Exec(ExpandConstant(‘{app}\InstanceConfig.exe‘), ‘-r‘, ‘‘, SW_SHOW, ewWaitUntilTerminated, ResultCode);
    // 启动服务
    Exec(ExpandConstant(‘{app}\media_service.exe‘), ‘-r‘, ‘‘, SW_HIDE, ewWaitUntilTerminated, ResultCode);
    // 启用完成按钮
    WizardForm.NextButton.Enabled := True;
  end
  else if CurPageID = wpInstalling then
  begin
    // 安装运行时库
    ExtractTemporaryFile(‘vcredist2008_x86.exe‘);
    // 执行2008库安装
    Exec(ExpandConstant(‘{tmp}\vcredist2008_x86.exe‘), ‘/q‘, ‘‘, SW_HIDE, ewWaitUntilTerminated, ResultCode);
  end
  else if CurPageID = domainPage.ID then
  begin
    WizardForm.BackButton.Enabled := False;
  end;
end;

// 卸载
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  begin
    DeleteFile(ExpandConstant(‘{app}\lsc‘));
  end;
end;

// 检查重启逻辑
function UninstallNeedRestart(): Boolean;
begin
  if serviceExists(‘MediaSrv‘) then
    result := True
  else
    result := False;
end;
时间: 2024-10-10 15:14:52

inno setup脚本,涵盖了自定义安装界面,调用dll等等应用的相关文章

以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用

原文:以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 ; Script generated by the Inno Setup 脚本向导. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! ; 为1的时候表示定义成试用版本 #define VERSION_TYPE ReadIni('Setup.ini', 'SetupType', 'type', '0') #if VER

Inno Setup 脚本

给你个我用的例子: Delphi/Pascal code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

Wix 安装部署教程(三)自定义安装界面和行为

接上一篇自定义安装界面,这篇继续探索,首先介绍下,Wix为我们定义了五种风格,每种风格的UI都是有一定顺序的.我们可以改变安装顺序,也可以完全自定义一个Dialog插入其中.比如Wix_Mondo 风格的顺序就如下,但不一定每个dialog会在安装的时候展示.   五.改变UI界面的安装顺序 要做到这一步,需要借助Wix的源码了,源码下载:http://wix.codeplex.com/SourceControl/latest .这里我选的界面风格是 WixUI_Mondo,源码不用全部打开,直

开源Inno Setup官网下载、安装、打包教程(官网安装向导中文语言包)

安装Inno Setup篇 1.搜索Inno Setup 2.下载Inno Setup 3.选择下载最新 innosetup-5.5.9-unicode.exe 版本(innosetup-5.5.9.exe同样支持中文安装向导) 4.安装Inno Setup:选择安装语言(没有中文选项) 5.安装Inno Setup:同意协议 6.安装Inno Setup:安装路径 7.安装Inno Setup:安装Preprocessor 8.安装Inno Setup:创建桌面快捷方式 9.安装Inno Se

inno setup 脚本常用修改 转

http://blog.sina.com.cn/s/blog_72c2eb350100y2sa.html 有人提及想更换安装界面的图片,其实方法很简单,只需要修改inno setup安装目录下的WizModernImage.bmp和WizModernSmallImage.bmp两张图片就可以了. 只需在代码页,添加如下代码,即可实现页面的优化. #define MyAppName "服务端"#define MyAppVersion "1.3.2"#define My

Wix 安装部署(二)自定义安装界面和行为

这篇会在上篇的基础上继续探索Wix的自定义界面和行为的功能,以下都是个人的小结,不当之处欢迎指正,与君共勉! 一.安装向导 Wix提供了五种安装向导风格, WixUI Advanced WixUI FeatureTree WixUI InstallDir WixUI Minimal WixUI Mondo 如何使用呢?需要两步,先不问为什么: 1.需要使用UIRef 元素  ,在Product中引入 <UI> <UIRef Id="WixUI_Minimal" /&g

Inno Setup自定义卸载文件名称的脚本

Inno Setup 支持在同一个目录中安装多个应用程序,所以根据安装的先后次序自动将卸载程序文件命名为 unins000.exe,unins001.exe,unins002.exe 等等.这是 INNO SETUP 自身的功能.请参阅 http://www.jrsoftware.org/iskb.php?uninstallername . 一旦安装过程结束后,你当然可以将卸载文件的名称改成任意其它的文件名,注意的是你除了要更改安装目录里面的 unins00X.exe 和 unins00X.da

使用inno setup打包程序完整脚本(.net框架检测,重复安装检测)

; 脚本由 Inno Setup 脚本向导 生成!; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "小小鸟软件"#define MyAppVersion "2012.2.29"#define MyAppPublisher "小小鸟科技"#define MyAppURL "http://www.cnblogs.com/IT-SmallBird/"#define MyAp

安装器---Inno Setup

Inno Setup[1]  用Delphi写成,其官方网站同时也提供源程序免费下载.它虽不能与Installshield这类恐龙级的安装制作软件相比,但也当之无愧算是后起之秀.Inno Setup是一个免费的安装制作软件,小巧.简便.精美是其最大特点,支持pascal脚本,能快速制作出标准Windows2000风格的安装界面,足以完成一般安装任务. 用innoSetup做应用程序安装包的示例脚本(.iss文件),具体要看innoSetup附带的文档,好象是pascal语言写的脚本. 示例1(应