inno setup制作安装包的经验

   利用inno setup制作安装包,inno setup下面编写的脚本语言用的pascal语言,不过编写安装包也只是需要用到简单的pascal语言语法,然后了解一下一些inno setup安装过程默认执行的函数,其实这些函数右键的安装事件里面都是有的,大家将需要用到的自己了解了解就行。

  脚本语言执行的都是一些Command命令,这些如果不懂上网一搜一大堆,inno setup可以自己定制自己想要实现的界面,相对于vs里面制作安装的程序还比较灵活的,inno setup里面有一些固定的代码格式,例如icons、files等等知道就可以了,废话不多说直接上我这次安装包的程序,程序后面我都带上了注释,希望各位都能看的懂。

  ; 脚本用 Inno Setup 脚本向导 生成。
; 查阅文档获取创建 INNO SETUP 脚本文件的详细资料!

#define SERIES              "***"
#define MyAppId             "{736AE8B4-49C3-4142-A4CB-13CC80D43B12}"
#define OUT_PUT_DIR         "E:\innoDebug"//输出文件的路径
#define IN_put_dir          "E:\kmsEnt"//输入文件的路径
#define LICENSE             "E:\kmsEnt\download\len.txt"//协议的路径
#define INSTALL_MODE        0 ;如果是更新标志位为1,如果是安装标志位为0,到时候根据情况需要手动更新标志位
#define WEB_URL             "Login.aspx"


#if (SERIES == "XXXX")
  #define MyAppName "KMS-Enterprise"
  #define MyAppVersion "1.0"
  #define MyAppPublisher "XXXX"
  #define MyAppURL "http://www.****.com.cn/"
  #define MyDirName "XXXX"
  #define OutAppName
  #define MyAppUninstallName "KMS_Uninstall"
#endif
[Setup]
; 注意: AppId 的值是唯一识别这个程序的标志。
; 不要在其他程序中使用相同的 AppId 值。
; (在编译器中点击菜单“工具 -> 产生 GUID”可以产生一个新的 GUID)
AppId={{#MyAppId}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={sd}\{#MyDirName}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir={#OUT_PUT_DIR}
OutputBaseFilename={#MyAppName} V{#MyAppVersion}
LicenseFile={#LICENSE}
;Password={#PASSWORD}
Compression=lzma
SolidCompression=yes
;ChangesEnvironment=yes
;AlwaysRestart=yes

[Languages]
//Name: "default"; MessagesFile: "compiler:Default.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"

[License]

[Files]//输入的文件信息
Source: "{#IN_put_dir}\*"; DestDir: "{app}";
Source: "{#IN_put_dir}\download\*"; DestDir: "{app}\download";Flags: recursesubdirs createallsubdirs
Source: "{#IN_put_dir}\download\kmsnew.sql"; Flags: dontcopy
//Source: "{#FILE_URL}\KMS_Pro.exe"; DestDir: "{app}"; Flags: ignoreversion
//Source: "{#FILE_URL}\..\Backup\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall; Components: main
//Source: "{#FILE_URL}\..\Socket\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall; Components: datebase
//Source: "{#FILE_URL}\..\MySQL\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall; Components: datebase
//Source: "{#FILE_URL}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: main
//Source: "{#FILE_URL}\..\Dll\X86\*"; DestDir: {app}; Flags: ignoreversion uninsrestartdelete; Components: main

[Icons]
Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{app}\{#MyAppURL}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{app}\{#MyAppUninstallName}.exe"
Name: "{userdesktop}\{#MyAppName}"; Filename: "{code:GetURLDir}";

[Run]
Filename: "{app}\download\AccessDatabaseEngine_X64.exe";Check:IsWin64;Flags:waituntilterminated;
Filename: "{app}\download\AccessDatabaseEngine.exe";Check:Not IsWin64;Flags:waituntilterminated;
//Filename: "{app}\download\jiaoben.bat";Flags:waituntilterminated;
//Filename: "{app}\Driver\CP210xVCPInstaller_x64.exe";Tasks:yes; Check:IsWin64;
//Filename: "{app}\Driver\CP210xVCPInstaller_x86.exe";Tasks:yes; Check:Not IsWin64;
//Filename: "{app}\MessageCatDriver\PL2303_Prolific_DriverInstaller_x86.exe";Tasks:yes2;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010A608000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E74486569676874034C010B436C69656E74576964746803F1010D4578706C6963697457696474680301020E4578706C696369744865696768740373010D506978656C73506572496E636802600A54657874486569676874020C00F10A544E6577427574746F6E0A4E657874427574746F6E074F6E436C69636B07105F4E657874427574746F6E436C69636B0000F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B5061676509496E6E65725061676500F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167651453656C656374436F6D706F6E656E74735061676500F10C544E6577436F6D626F426F780A5479706573436F6D626F064865696768740214000000F110544E65774E6F7465626F6F6B506167651653656C65637450726F6772616D47726F757050616765084E6578745061676507094949537365727665720000F110544E65774E6F7465626F6F6B506167650F53656C6563745461736B73506167650C50726576696F757350616765070953514C536572766572000010544E65774E6F7465626F6F6B50616765094949537365727665720E506172656E7453686F7748696E74080853686F7748696E74080743617074696F6E060A494953205365727665720B4465736372697074696F6E06164949532053657276657220496E666F726D6174696F6E0C50726576696F757350616765071653656C65637450726F6772616D47726F757050616765084E65787450616765070953514C5365727665720006544C6162656C0A6C62536974654E616D65044C656674021703546F700233055769647468023606486569676874020C0743617074696F6E060953697465204E616D65000006544C6162656C096C624E657753697465044C656674021703546F70025E055769647468023606486569676874020C0743617074696F6E06095369746520506F7274000006544C6162656C064C6162656C32044C656674021103546F70027E055769647468023C06486569676874020C0743617074696F6E060A49502041646472657373000006544C6162656C064C6162656C33044C656674021D03546F70039E00055769647468023006486569676874020C0743617074696F6E060841707020506F6F6C00000A544E6577427574746F6E0D62746E436F6E6E656374494953044C656674020903546F70020605576964746802630648656967687402190743617074696F6E060B436F6E6E65637420494953085461624F726465720200074F6E436C69636B071262746E436F6E6E656374494953436C69636B00000A544E6577427574746F6E0D62746E43726561746553697465044C65667403030103546F70039600055769647468026B0648656967687402190743617074696F6E060B4372656174652053697465085461624F726465720201074F6E436C69636B071262746E43726561746553697465436C69636B000008544E6577456469740853697465506F7274044C656674025703546F70025605576964746803920006486569676874021407496D654E616D651209000000378C4C6BFC62F397938F6551D56C20003200085461624F726465720203000008544E65774564697408536974654E616D65044C656674025703546F700233055769647468039200064865696768740214085461624F726465720202000008544E65774564697406536974654970044C656674025603546F700276055769647468039200064865696768740214085461624F72646572020400000C544E6577436F6D626F426F780A4C7374417070706F6F6C044C656674025603546F7003960005576964746803910006486569676874021406437572736F72070B637248616E64506F696E74055374796C65070E637344726F70446F776E4C6973740A4974656D486569676874020C085461624F72646572020500000010544E65774E6F7465626F6F6B506167650953514C5365727665720E506172656E7453686F7748696E74080853686F7748696E74080743617074696F6E060A53514C205365727665720B4465736372697074696F6E061553514C2053657276657220496E666F6D6174696F6E0C50726576696F7573506167650709494953736572766572084E65787450616765070F53656C6563745461736B73506167650006544C6162656C076C6253716C4970044C656674022D03546F700222055769647468026606486569676874020C0743617074696F6E06115365727665722049502041646472657373000006544C6162656C064C6162656C31044C656674025703546F700252055769647468023C06486569676874020C0743617074696F6E060A4C6F67696E204E616D65000006544C6162656C056C62507764044C656674026303546F70027E055769647468023006486569676874020C0743617074696F6E060850617373776F7264000008544E6577456469740865647453716C4970044C65667403C20003546F70021E055769647468027906486569676874021407496D654E616D651209000000378C4C6BFC62F397938F6551D56C20003200085461624F726465720200000008544E657745646974086564744C6F67696E044C65667403C20003546F70024E055769647468027906486569676874021407496D654E616D651209000000378C4C6BFC62F397938F6551D56C20003200085461624F72646572020100000A544E6577427574746F6E0D62746E53716C436F6E74656374044C65667403D00003546F7003AD00055769647468026B0648656967687402190743617074696F6E060F437265617465204461746162617365085461624F726465720203074F6E436C69636B071262746E53716C436F6E74656374436C69636B00000D5450617373776F7264456469740670776453716C044C65667403C20003546F70027A0557696474680279064865696768740214085461624F72646572020200000000000000

[Code]
{ RedesignWizardFormBegin } // 不要删除这一行代码。
// 不要修改这一段代码,它是自动生成的。
var
  OldEvent_NextButtonClick: TNotifyEvent;
  IISserver: TWizardPage;
  lbSiteName: TLabel;
  lbNewSite: TLabel;
  Label2: TLabel;
  Label3: TLabel;
  btnConnectIIS: TNewButton;
  btnCreateSite: TNewButton;
  SitePort: TNewEdit;
  SiteName: TNewEdit;
  SiteIp: TNewEdit;
  LstApppool: TNewComboBox;
  SQLServer: TWizardPage;
  lbSqlIp: TLabel;
  Label1: TLabel;
  lbPwd: TLabel;
  edtSqlIp: TNewEdit;
  edtLogin: TNewEdit;
  btnSqlContect: TNewButton;
  pwdSql: TPasswordEdit;
   update:Integer;IISflag:Integer;Sqlflag:Integer;

procedure _NextButtonClick(Sender: TObject); forward;
procedure btnConnectIISClick(Sender: TObject); forward;
procedure btnCreateSiteClick(Sender: TObject); forward;
procedure btnSqlContectClick(Sender: TObject); forward;

procedure InitializeWizard;
begin
  { 创建自定义向导页面 }
  IISserver := CreateCustomPage(wpSelectProgramGroup, 'IIS Server', 'IIS Server Information');
  SQLServer := CreateCustomPage(IISserver.ID, 'SQL Server', 'SQL Server Infomation');

  with WizardForm.NextButton do
  begin
    OldEvent_NextButtonClick := OnClick;
    OnClick := @_NextButtonClick;
  end;

  { IISserver }
  with IISserver.Surface do
  begin
    ShowHint := False;
  end;

  { lbSiteName }
  lbSiteName := TLabel.Create(WizardForm);
  with lbSiteName do
  begin
    Parent := IISserver.Surface;
    Caption := 'Site Name';
    Left := ScaleX(23);
    Top := ScaleY(51);
    Width := ScaleX(54);
    Height := ScaleY(12);
  end;

  { lbNewSite }
  lbNewSite := TLabel.Create(WizardForm);
  with lbNewSite do
  begin
    Parent := IISserver.Surface;
    Caption := 'Site Port';
    Left := ScaleX(23);
    Top := ScaleY(94);
    Width := ScaleX(54);
    Height := ScaleY(12);
  end;

  { Label2 }
  Label2 := TLabel.Create(WizardForm);
  with Label2 do
  begin
    Parent := IISserver.Surface;
    Caption := 'IP Address';
    Left := ScaleX(17);
    Top := ScaleY(126);
    Width := ScaleX(60);
    Height := ScaleY(12);
  end;

  { Label3 }
  Label3 := TLabel.Create(WizardForm);
  with Label3 do
  begin
    Parent := IISserver.Surface;
    Caption := 'App Pool';
    Left := ScaleX(29);
    Top := ScaleY(158);
    Width := ScaleX(48);
    Height := ScaleY(12);
  end;

  { btnConnectIIS }
  btnConnectIIS := TNewButton.Create(WizardForm);
  with btnConnectIIS do
  begin
    Parent := IISserver.Surface;
    Left := ScaleX(9);
    Top := ScaleY(6);
    Width := ScaleX(99);
    Height := ScaleY(25);
    Caption := 'Connect IIS';
    OnClick := @btnConnectIISClick;
  end;

  { btnCreateSite }
  btnCreateSite := TNewButton.Create(WizardForm);
  with btnCreateSite do
  begin
    Parent := IISserver.Surface;
    Left := ScaleX(259);
    Top := ScaleY(150);
    Width := ScaleX(107);
    Height := ScaleY(25);
    Caption := 'Create Site';
    OnClick := @btnCreateSiteClick;
  end;

  { SitePort }
  SitePort := TNewEdit.Create(WizardForm);
  with SitePort do
  begin
    Parent := IISserver.Surface;
    Left := ScaleX(87);
    Top := ScaleY(86);
    Width := ScaleX(146);
    Height := ScaleY(20);
  end;

  { SiteName }
  SiteName := TNewEdit.Create(WizardForm);
  with SiteName do
  begin
    Parent := IISserver.Surface;
    Left := ScaleX(87);
    Top := ScaleY(51);
    Width := ScaleX(146);
    Height := ScaleY(20);
  end;

  { SiteIp }
  SiteIp := TNewEdit.Create(WizardForm);
  with SiteIp do
  begin
    Parent := IISserver.Surface;
    Left := ScaleX(86);
    Top := ScaleY(118);
    Width := ScaleX(146);
    Height := ScaleY(20);
  end;

  { LstApppool }
  LstApppool := TNewComboBox.Create(WizardForm);
  with LstApppool do
  begin
    Parent := IISserver.Surface;
    Left := ScaleX(86);
    Top := ScaleY(150);
    Width := ScaleX(145);
    Height := ScaleY(20);
    Cursor := crHand;
    Style := csDropDownList;
  end;

  btnConnectIIS.TabOrder := 0;
  btnCreateSite.TabOrder := 1;
  SiteName.TabOrder := 2;
  SitePort.TabOrder := 3;
  SiteIp.TabOrder := 4;
  LstApppool.TabOrder := 5;

  { SQLServer }
  with SQLServer.Surface do
  begin
    ShowHint := False;
  end;

  { lbSqlIp }
  lbSqlIp := TLabel.Create(WizardForm);
  with lbSqlIp do
  begin
    Parent := SQLServer.Surface;
    Caption := 'Server IP Address';
    Left := ScaleX(45);
    Top := ScaleY(34);
    Width := ScaleX(102);
    Height := ScaleY(12);
  end;

  { Label1 }
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Parent := SQLServer.Surface;
    Caption := 'Login Name';
    Left := ScaleX(87);
    Top := ScaleY(82);
    Width := ScaleX(60);
    Height := ScaleY(12);
  end;

  { lbPwd }
  lbPwd := TLabel.Create(WizardForm);
  with lbPwd do
  begin
    Parent := SQLServer.Surface;
    Caption := 'Password';
    Left := ScaleX(99);
    Top := ScaleY(126);
    Width := ScaleX(48);
    Height := ScaleY(12);
  end;

  { edtSqlIp }
  edtSqlIp := TNewEdit.Create(WizardForm);
  with edtSqlIp do
  begin
    Parent := SQLServer.Surface;
    Left := ScaleX(194);
    Top := ScaleY(30);
    Width := ScaleX(121);
    Height := ScaleY(20);
  end;

  { edtLogin }
  edtLogin := TNewEdit.Create(WizardForm);
  with edtLogin do
  begin
    Parent := SQLServer.Surface;
    Left := ScaleX(194);
    Top := ScaleY(78);
    Width := ScaleX(121);
    Height := ScaleY(20);
  end;

  { btnSqlContect }
  btnSqlContect := TNewButton.Create(WizardForm);
  with btnSqlContect do
  begin
    Parent := SQLServer.Surface;
    Left := ScaleX(208);
    Top := ScaleY(173);
    Width := ScaleX(107);
    Height := ScaleY(25);
    Caption := 'Create Database';
    OnClick := @btnSqlContectClick;
  end;

  { pwdSql }
  pwdSql := TPasswordEdit.Create(WizardForm);
  with pwdSql do
  begin
    Parent := SQLServer.Surface;
    Left := ScaleX(194);
    Top := ScaleY(122);
    Width := ScaleX(121);
    Height := ScaleY(20);
  end;

  edtSqlIp.TabOrder := 0;
  edtLogin.TabOrder := 1;
  pwdSql.TabOrder := 2;
  btnSqlContect.TabOrder := 3;

{ ReservationBegin }
  // 这一部分是提供给你的,你可以在这里输入一些补充代码。

{ ReservationEnd }
end;
// 不要修改这一段代码,它是自动生成的。
{ RedesignWizardFormEnd } // 不要删除这一行代码。
//页面改变时执行的系统默认的函数
procedure CurPageChanged(CurPageID: Integer);
var
ErrorCode: Integer;
IniPortLines: TArrayOfString;
sLi: TStringList;
i:Integer;
j:Integer;//MgdVersion
test:String;
begin
update:={#INSTALL_MODE};//如果是更新标志位为1,如果是安装标志位为0,到时候根据情况需要手动更新标志位 InitializeWizard update:Integer;IISflag:Integer;Sqlflag:Integer;
if update=0 then
begin
if CurPageID = IISserver.ID then
begin
if IISflag=0 then
begin
ShellExec('open', ExpandConstant('{cmd}'), ' /c C:\Windows\System32\inetsrv\appcmd.exe list APPPOOL >c:\f.txt', '', SW_HIDE, ewNoWait, ErrorCode);//将应用程序池的信息全部写入C盘中的一个文件内
Sleep(1000);
LoadStringsFromFile( 'c:\f.txt', IniPortLines );//读取文件内的字符串,以数组的形式将字符串保存起来
sLi := TStringList.Create;
for i:= 0 to GetArrayLength(IniPortLines)-1 do //for循环
  begin
  j:=Pos('" (',IniPortLines[i]);
  IniPortLines[i]:=Copy(IniPortLines[i],10,j-10);//截取字符串里面的字段
  sLi.Add(IniPortLines[i]);//将数据添加进入TSringList数组中
  end;
   LstApppool.Items:=sLi;
WizardForm.NextButton.Enabled:=false;//控制页面上下一步按钮的是否有用
DeleteFile('c:\f.txt');//删除文件
end
else
  WizardForm.NextButton.Enabled:=true;//控制页面上下一步按钮的是否有用
end;
if CurPageID=SQLServer.ID then //根据页面的id去判断现在处于哪个页面
begin
  if Sqlflag=0 then
    begin
    WizardForm.NextButton.Enabled:=false;//控制页面上下一步按钮的是否有用
    end
    else
    WizardForm.NextButton.Enabled:=true;//控制页面上下一步按钮的是否有用
end;
end
else
begin
 SiteName.Enabled:=false;//控制页面上按钮是否能用
 Siteport.Enabled:=false;//控制页面上按钮是否能用
 SiteIp.Enabled:=false;//控制页面上按钮是否能用
 edtSqlIp.Enabled:=false;//控制页面上按钮是否能用
 edtLogin.Enabled:=false;//控制页面上按钮是否能用
 pwdSql.Enabled:=false;//控制页面上按钮是否能用
 btnSqlContect.Enabled:=false;//控制页面上按钮是否能用
 btnCreateSite.Enabled:=false;//控制页面上按钮是否能用
 LstApppool.Enabled:=false;//控制页面上按钮是否能用
end;
end;

procedure _NextButtonClick(Sender: TObject);
begin
  OldEvent_NextButtonClick(Sender);
end;

procedure btnCreateSiteClick(Sender: TObject);
var
  a :Integer;
  dirstr:String;
  name:String;//网站名称参数
  portk:String;//端口参数
  ipadr:String;//ip参数
  ErrorCode: Integer;//错误变量
  IniPortLines: TArrayOfString;//数组
  count:Integer;//计数
begin
   dirstr:=ExpandConstant('{app}');//获取当前安装的路劲
   name:=SiteName.text;//将页面上填写的信息存入变量里面
   portk:=SitePort.text;//将页面上填写的信息存入变量里面
   ipadr:=SiteIp.text;//将页面上填写的信息存入变量里面
   //ShellExec('open', ExpandConstant('{cmd}'), '/c C:\Windows\System32\inetsrv', '', SW_HIDE, ewNoWait, ErrorCode);
   ShellExec('open', ExpandConstant('{cmd}'), ' /c C:\Windows\System32\inetsrv\appcmd.exe list site "'+name+'" >c:\b.txt', '', SW_HIDE, ewNoWait, ErrorCode);//在iis里面查询自己填写的网站名称是否存在
   Sleep(1000);
   LoadStringsFromFile( 'c:\b.txt', IniPortLines );//将文件里面的信息以字符串的形式取出来
   count:=GetArrayLength(IniPortLines);//获取字符串的长度
   if count>0 then
   begin
   MsgBox('The Site Name has Existed!',mbConfirmation,MB_OK);
   end
   else
   begin
   ShellExec('open', ExpandConstant('{cmd}'), '/c C:\Windows\System32\inetsrv\appcmd.exe add site /name:"'+name+'" /bindings:http/'+ipadr+':'+portk+': /physicalPath:"'+dirstr+'" /applicationDefaults.applicationPool:"'+LstApppool.Text+'"', '', SW_HIDE, ewNoWait, ErrorCode);//添加网站
   Sleep(1000);
   //ShellExec('open', ExpandConstant('{cmd}'), '/c C:\Windows\System32\inetsrv\appcmd.exe set site /name:"'+name+'" /applicationDefaults.applicationPool:"ASP.net v4.0"', '', SW_HIDE, ewNoWait, ErrorCode);
   DeleteFile('c:\b.txt');//删除文件
   MsgBox('Site Made Success!',mbConfirmation,MB_OK);
   ShellExec('open', ExpandConstant('{cmd}'), '/c netsh advfirewall firewall add rule name="KmsEnterprise" dir=in action=allow protocol=TCP localport='+portk, '', SW_HIDE, ewNoWait, ErrorCode);//打开防火墙的端口
   if update=0 then
   begin
   WizardForm.NextButton.Enabled:=true;//控制页面按钮是否有用
   IISflag:=1;//标志位信息,全局变量
   end
   end
   
   //MsgBox(dirstr+':'+name+':'+portk+':'+ipadr,mbConfirmation,MB_OK);
  //MsgBox(ExpandConstant('{app}'),mbConfirmation,MB_OK);


end;

//获取桌面快捷方式的网址的函数
function GetURLDir( Param: String ) : String;
var
  URLDir          : String;
begin
  URLDir := 'http://'+SiteIp.text+':'+ SitePort.Text +'/{#WEB_URL}';//获取网址
  Result := URLDir;//返回的参数
end;

procedure btnSqlContectClick(Sender: TObject);
var
  a :Integer;
  sqlip:String;
  sqlUser:string;
  sqlPwd:String;
  ErrorCode: Integer;
  IniPortLines: TArrayOfString;
  count:Integer;
  dIniPortLines: TArrayOfString;
  Path:String;
begin
ExtractTemporaryFile('kmsnew.sql');//解压临时文件,下面获取安装包内的文件用的
sqlip:=edtSqlIp.text;//获取页面输入信息
sqlUser:=edtLogin.text;//获取页面输入信息
sqlPwd:=pwdSql.text;//获取页面输入信息
ShellExec('open', ExpandConstant('{cmd}'), '/c osql.exe -S '+sqlip+' -U '+sqlUser+' -P '+sqlPwd+' -Q >c:\c.txt', '', SW_HIDE, ewNoWait, ErrorCode);//验证输入的数据库信息是否正确
Sleep(1000);
LoadStringsFromFile( 'c:\c.txt', IniPortLines );//读取出文件内的信息
count:=GetArrayLength(IniPortLines);//获取数组长度
if count=0 then
begin
 ShellExec('open', ExpandConstant('{cmd}'), '/c osql.exe -S '+sqlip+' -U '+sqlUser+' -P '+sqlPwd+' -d kms -Q >c:\d.txt', '', SW_HIDE, ewNoWait, ErrorCode);//验证数据库名是否已经存在
 Sleep(1000);
 LoadStringsFromFile( 'c:\d.txt', dIniPortLines ); //读取出文件内的信息
count:=GetArrayLength(dIniPortLines);//获取数组长度
  if count=0 then
  begin
  MsgBox('Database Create Success!',mbConfirmation,MB_OK);//弹出框
  if update=0 then
  begin
  WizardForm.NextButton.Enabled:=true;
  Sqlflag:=1;
  end
  end
  else begin
     //创建数据库和数据库表
     //创建数据库
      ShellExec('open', ExpandConstant('{cmd}'), '/c osql.exe -S '+sqlip+' -U '+sqlUser+' -P '+sqlPwd+' -Q "create database kms"', '', SW_HIDE, ewNoWait, ErrorCode);//创建数据库
      Sleep(1000);
      //执行kmsnew.sql文件创建数据库表
      //Path:= ExpandConstant('{app}')+'\download\kmsnew.sql';{userappdata} ExpandConstant('{tmp}/kmsnew.sql')
      //Path:= ExpandConstant('{#IN_put_dir}')+'\download\kmsnew.sql';
       Path:= ExpandConstant('{tmp}/kmsnew.sql'); //获取安装包内的文件
      ShellExec('open', ExpandConstant('{cmd}'), '/c osql.exe -S '+sqlip+' -U '+sqlUser+' -P '+sqlPwd+' -d kms -i '+ExpandConstant('{tmp}')+'/kmsnew.sql', '', SW_HIDE, ewNoWait, ErrorCode);//创建数据库表
      MsgBox('Database Create Success!!',mbConfirmation,MB_OK);
      if update=0 then
      begin
      WizardForm.NextButton.Enabled:=true;//控制页面按钮是否有用
      Sqlflag:=1;//标志位参数
      end
  end

end
else
begin
//连接sqlserver失败
 MsgBox('Sql Server Connect Failed,Please Check The Password!',mbConfirmation,MB_OK);
end;
DeleteFile('c:\c.txt');//删除文件
DeleteFile('c:\d.txt');//删除文件
  a := 1;
end;

procedure btnConnectIISClick(Sender: TObject);
var
  a :Integer;
  ErrorCode: Integer;
  IniPortLines: TArrayOfString;
  count:Integer;
  Path:String;
  IIS:Variant;
begin
//IIsNext.Enabled:=true;
//ExtractTemporaryFile('jiaoben.bat');//解压临时文件,下面获取安装包内的文件用的
//begin
try
     IIS:= CreateOleObject('IISNamespace');
     IIS:=Unassigned;
     MsgBox('IIS Connect Success!',mbConfirmation,MB_OK);
except
    RaiseException('无法检测到iis服务器,请确认是否正确安装\n如确认已安装完成请创建站点!');//.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)

end;

//ShellExec('open', ExpandConstant('{cmd}'), '/c iisreset /status >c:\a.txt', '', SW_HIDE, ewNoWait, ErrorCode);
//Sleep(1000);
 //LoadStringsFromFile( 'c:\a.txt', IniPortLines );
 //count:=GetArrayLength(IniPortLines);
 //if count = 7 then
 //begin
 //MsgBox('IIS Connect Success!',mbConfirmation,MB_OK);
 //end else
 //begin
      //Path:= ExpandConstant('{tmp}')+'/jiaoben.bat';
      //Path:=ExpandConstant('{cmd}');
      //ShellExec('open', ExpandConstant('{cmd}'), '/c '+ExpandConstant('{tmp}')+'/jiaoben.bat', '', SW_HIDE, ewNoWait, ErrorCode);
      //Sleep(2000);
      //MsgBox('IIS Connect Failed!!',mbConfirmation,MB_OK);
 //end;
 //Sleep(1000);
 //DeleteFile('c:\a.txt');
  //a := 1;
end;


{******************************************************************************
 *   设置环境变量函数
 ******************************************************************************}
procedure SetEnv( aEnvName, aEnvValue: String; aIsInstall , aIsAll : Boolean );
var
  sOrgValue             : String;
  x,len                 : Integer;
begin
  RegQueryStringValue( HKEY_LOCAL_MACHINE ,
    'SYSTEM\CurrentControlSet\Control\Session Manager\Environment' ,
    aEnvName, sOrgValue ) ;
  sOrgValue := Trim( sOrgValue );
  begin
    x   := pos( Uppercase( aEnvValue ) , Uppercase( sOrgValue ) );
    len := length(aEnvValue);
    if aIsInstall then                                                         //是安装还是反安装
    begin
      if not aIsAll then
      begin
          if length(sOrgValue) > 0 then
            aEnvValue := ';'+ aEnvValue;

          if x = 0 then
            Insert( aEnvValue , sOrgValue , length(sOrgValue) + 1 );
      end else
      begin
        sOrgValue := Trim( aEnvValue );
      end;
    end else
    begin
      if x > 0 then
        Delete( sOrgValue , x , len );
      if length( sOrgValue )= 0 then
      begin
        RegDeleteValue(HKEY_LOCAL_MACHINE,
          'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
          aEnvName);
        exit;
      end;
    end;
    StringChange( sOrgValue, ';;' , ';' );
    RegWriteStringValue(HKEY_LOCAL_MACHINE,
      'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
      aEnvName, sOrgValue ) ;
  end;
end;

{******************************************************************************
 *   修改配置文件,安装程序完成之后执行的函数
 ******************************************************************************}
procedure CurStepChanged( CurStep: TSetupStep );
var
  IniFile, OldString, NewString     : String;
  IniFileLines                      : TArrayOfString;
  i                                 : Integer;
  uninspath, uninsname, NewUninsName, MyAppName, MyAppId: string;
begin
  if CurStep = ssDone then
  begin
    IniFile   := ExpandConstant('{app}\Web.config');                         // 你的 INI 文件名
    OldString := '<add key="ConnectionString" value="Data Source=192.168.0.29;Initial Catalog=kms;Persist Security Info=false;Integrated Security=false;uid=admin;pwd=password"/>';                                                  // 要替换的旧字符串
    NewString := '<add key="ConnectionString"    value="Data Source='+edtSqlIp.text+';Initial Catalog=kms;Persist Security Info=false;Integrated Security=false;uid='+edtLogin.text+';pwd='+pwdSql.text+'"/>';                               // 新字符串
    //StringChange( NewString , '\', '/');
    //NewString := NewString + '/' ;
    //StringChange( NewString , '//', '/');

    LoadStringsFromFile( IniFile , IniFileLines );
    for i:= 0 to GetArrayLength(IniFileLines)-1 do  //循环语句
      if ( Pos( OldString , IniFileLines[i] ) > 0) then //在字符串中存在
        StringChange(IniFileLines[i], OldString, NewString);//将新的字符串替换老的字符串
    SaveStringsToFile( IniFile , IniFileLines, False );//将信息重新写入文件
    //SetEnv( 'MYSQL_HOME' , ExpandConstant('{app}\MySQL' ), true , true );
    //SetEnv( 'PATH' , ExpandConstant('%MYSQL_HOME%\bin' ), true ,false );
  end;

  if CurStep=ssDone then
  begin
  // 指定新的注册表名,请相应修改!
  //MyAppId := '{C893C605-CC64-44F4-B60B-30998FE892DF}';
  MyAppId := '{#MyAppId}';
  //NewUninsName := 'KMS_Uninstall';
  NewUninsName := '{#MyAppUninstallName}';

  // 以下重命名卸载文件
  uninspath:= ExtractFilePath(ExpandConstant('{uninstallexe}'));
  uninsname:= Copy(ExtractFileName(ExpandConstant('{uninstallexe}')),1,8);
  RenameFile(uninspath + uninsname + '.exe', uninspath + NewUninsName + '.exe');
  RenameFile(uninspath + uninsname + '.dat', uninspath + NewUninsName + '.dat');
  // 以下修改相应的注册表内容
  if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + MyAppId + '_is1') then
    begin
    RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + MyAppId + '_is1', 'UninstallString', '"' + uninspath + NewUninsName + '.exe"');
    RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + MyAppId + '_is1', 'QuietUninstallString', '"' + uninspath + NewUninsName + '.exe" /SILENT');
    end;
  end;
end;

{******************************************************************************
 *   卸载
 ******************************************************************************}
procedure CurUninstallStepChanged (CurUninstallStep: TUninstallStep );
var
  IsAppRunning: boolean;
begin
  case CurUninstallStep of
  usUninstall:
  begin
   
  end;
  usPostUninstall:
  begin // 卸载完成
    // MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall just finished.', mbInformation, MB_OK);
    // ...insert code to perform post-uninstall tasks here...
    //ShellExec('open', 'http://www.dreams8.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
  end;
end;
end;







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值