首页 > 代码库 > 以前编写的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 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 serverDefaultGroupName={#MyAppName}AllowNoIcons=yesLicenseFile=license.txtOutputDir=outputOutputBaseFilename={#MyOutputBaseFilename}SetupIconFile=setup.icoCompression=lzmaSolidCompression=yesVersionInfoVersion={#MyAppVersion}VersionInfoCompany={#MyAppPublisher}VersionInfoCopyright=Copyright (C) 2010-2013VersionInfoProductName={#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: dontcopySource: ..\build\libeay32.dll; Flags: dontcopySource: ..\build\vcredist2008_x86.exe; Flags: dontcopy#ifdef FULL_VERSIONSource: ..\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: ignoreversionSource: ..\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}\示例页面.urlName: {group}\help\安装说明; Filename: {app}\help\安装说明.pdfName: {group}\help\功能说明; Filename: {app}\help\功能说明.pdfName: {group}\help\开发说明; Filename: {app}\help\开发说明.pdfName: {group}\help\配置说明; Filename: {app}\help\配置说明.pdfName: {group}\help\统计模块; Filename: {app}\help\统计模块.pdfName: {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: desktopiconName: {commondesktop}\开启PMS服务; Filename: {app}\media_service.exe; Parameters: -r; IconFilename: {app}\{#MyAppExeName}; Tasks: desktopiconName: {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}\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;

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