zoukankan      html  css  js  c++  java
  • 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}xxxmedia 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:Languageschinese.isl
    
    [Files]
    ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
    ; 用来检测安装程序中输入的注册码是否有效
    Source: ..uildregister_help.dll; Flags: dontcopy
    Source: ..uildlibeay32.dll; Flags: dontcopy
    Source: ..uildvcredist2008_x86.exe; Flags: dontcopy
    
    #ifdef FULL_VERSION
    Source: ..uildserver.conf; DestDir: {app}
    Source: ..uildmedia_service.exe; DestDir: {app}
    Source: ..uildlibmysql.dll; DestDir: {app}
    Source: ..uildlibeay32.dll; DestDir: {app}
    Source: ..uildzlib1.dll; DestDir: {app}
    Source: ..uildregister_check.exe; DestDir: {app}
    Source: ..uildQtCore4.dll; DestDir: {app}
    Source: ..uildQtGui4.dll; DestDir: {app}
    Source: ..uildmglobal.dll; DestDir: {app}
    Source: ..uildmsvcp100.dll; DestDir: {app}
    Source: ..uildmsvcr100.dll; DestDir: {app}
    Source: ..uildinitconfig.exe; DestDir: {app}
    Source: ..uildInstanceConfig.exe; DestDir: {app}
    ;Source: ..uildphp-fpm.exe; DestDir: {app}
    Source: ..uild管理统计页面.url; DestDir: {app}
    Source: ..uild示例页面.url; DestDir: {app}
    
    Source: ..uildlaunchlist; DestDir: {app}
    ;Source: ..uildphpcgi; DestDir: {app}
    
    Source: ..uildlighttpd.conf; DestDir: {app}lmplighttpdconf; Flags: ignoreversion
    Source: ..uildmy.ini; DestDir: {app}lmpmysql; Flags: ignoreversion
    
    ; web服务器整套目录
    Source: ..uildlmp*; DestDir: {app}lmp; Flags: recursesubdirs createallsubdirs
    ; doc文档目录
    Source: ..doc*; DestDir: {app}help; Flags: recursesubdirs createallsubdirs
    ; 播放器相关目录
    Source: ..uildswfs*; DestDir: {app}swfs; Flags: recursesubdirs createallsubdirs
    ; 播放器SDK相关目录
    Source: ..uildscriptlib*; 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 'getCode@files:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath';
    
    // 进行检查
    function regCheck(const regKey: PChar): Boolean;
    external 'regCheck@files:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath';
    
    // 进行注册
    function regSave(const regKey, regPath: PChar): Boolean;
    external 'regSave@files:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath';
    
    // 清理注册
    procedure regClear(const regPath: PChar);
    external 'regClear@files:register_help.dll,libeay32.dll,msvcr100.dll stdcall setuponly delayload loadwithalteredsearchpath';
    
    function OpenSCManager(const machine: LongInt; const dbName: LongInt;  access: Dword):LongInt;
    external 'OpenSCManagerA@Advapi32.dll stdcall';
    
    function OpenService(svcMgr: LongInt; const svcName: pchar;  access: Dword):LongInt;
    external 'OpenServiceA@Advapi32.dll stdcall';
    
    function CloseServiceHandle(svc: LongInt):Boolean;
    external 'CloseServiceHandle@Advapi32.dll 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}lmphtdocssampleconfig.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;
  • 相关阅读:
    阅读笔记 The Impact of Imbalanced Training Data for Convolutional Neural Networks [DegreeProject2015] 数据分析型
    web网站——apache和nginx对比02
    web网站——理论01
    云计算openstack——云计算、大数据、人工智能(16)
    yum管理——ningx部署私有repo源(4)
    zabbix-web监控
    zabbix-自定义监控
    zabbix-邮件报警
    zabbix-自动发现并监控
    web网站——nginx,LNMP部署03
  • 原文地址:https://www.cnblogs.com/eastson/p/4409830.html
Copyright © 2011-2022 走看看