123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- [Setup]
- AppName=My Program
- AppVersion=1.5
- WizardStyle=modern
- DisableWelcomePage=no
- CreateAppDir=no
- DisableProgramGroupPage=yes
- DefaultGroupName=My Program
- UninstallDisplayIcon={app}\MyProg.exe
- OutputDir=userdocs:Inno Setup Examples Output
- [Code]
- {--- SQLDMO ---}
- const
- SQLServerName = 'localhost'
- SQLDMOGrowth_MB = 0
- procedure SQLDMOButtonOnClick(Sender: TObject)
- var
- SQLServer, Database, DBFile, LogFile: Variant
- IDColumn, NameColumn, Table: Variant
- begin
- if MsgBox('Setup will now connect to Microsoft SQL Server ''' + SQLServerName + ''' via a trusted connection and create a database. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
- Exit
- { Create the main SQLDMO COM Automation object }
- try
- SQLServer := CreateOleObject('SQLDMO.SQLServer')
- except
- RaiseException('Please install Microsoft SQL server connectivity tools first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)')
- end
- { Connect to the Microsoft SQL Server }
- SQLServer.LoginSecure := True
- SQLServer.Connect(SQLServerName)
-
- MsgBox('Connected to Microsoft SQL Server ''' + SQLServerName + '''.', mbInformation, mb_Ok)
- { Setup a database }
- Database := CreateOleObject('SQLDMO.Database')
- Database.Name := 'Inno Setup'
-
- DBFile := CreateOleObject('SQLDMO.DBFile')
- DBFile.Name := 'ISData1'
- DBFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.mdf'
- DBFile.PrimaryFile := True
- DBFile.FileGrowthType := SQLDMOGrowth_MB
- DBFile.FileGrowth := 1
- Database.FileGroups.Item('PRIMARY').DBFiles.Add(DBFile)
- LogFile := CreateOleObject('SQLDMO.LogFile')
- LogFile.Name := 'ISLog1'
- LogFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.ldf'
- Database.TransactionLog.LogFiles.Add(LogFile)
-
- { Add the database }
- SQLServer.Databases.Add(Database)
- MsgBox('Added database ''' + Database.Name + '''.', mbInformation, mb_Ok)
- { Setup some columns }
- IDColumn := CreateOleObject('SQLDMO.Column')
- IDColumn.Name := 'id'
- IDColumn.Datatype := 'int'
- IDColumn.Identity := True
- IDColumn.IdentityIncrement := 1
- IDColumn.IdentitySeed := 1
- IDColumn.AllowNulls := False
- NameColumn := CreateOleObject('SQLDMO.Column')
- NameColumn.Name := 'name'
- NameColumn.Datatype := 'varchar'
- NameColumn.Length := '64'
- NameColumn.AllowNulls := False
-
- { Setup a table }
- Table := CreateOleObject('SQLDMO.Table')
- Table.Name := 'authors'
- Table.FileGroup := 'PRIMARY'
-
- { Add the columns and the table }
-
- Table.Columns.Add(IDColumn)
- Table.Columns.Add(NameColumn)
- Database.Tables.Add(Table)
- MsgBox('Added table ''' + Table.Name + '''.', mbInformation, mb_Ok)
- end
- {--- IIS ---}
- const
- IISServerName = 'localhost'
- IISServerNumber = '1'
- IISURL = 'http://127.0.0.1'
- procedure IISButtonOnClick(Sender: TObject)
- var
- IIS, WebSite, WebServer, WebRoot, VDir: Variant
- ErrorCode: Integer
- begin
- if MsgBox('Setup will now connect to Microsoft IIS Server ''' + IISServerName + ''' and create a virtual directory. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
- Exit
- { Create the main IIS COM Automation object }
- try
- IIS := CreateOleObject('IISNamespace')
- except
- RaiseException('Please install Microsoft IIS first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)')
- end
- { Connect to the IIS server }
- WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc')
- WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber)
- WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root')
- { (Re)create a virtual dir }
- try
- WebRoot.Delete('IIsWebVirtualDir', 'innosetup')
- WebRoot.SetInfo()
- except
- end
- VDir := WebRoot.Create('IIsWebVirtualDir', 'innosetup')
- VDir.AccessRead := True
- VDir.AppFriendlyName := 'Inno Setup'
- VDir.Path := 'C:\inetpub\innosetup'
- VDir.AppCreate(True)
- VDir.SetInfo()
- MsgBox('Created virtual directory ''' + VDir.Path + '''.', mbInformation, mb_Ok)
- { Write some html and display it }
- if MsgBox('Setup will now write some HTML and display the virtual directory. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
- Exit
- ForceDirectories(VDir.Path)
- SaveStringToFile(VDir.Path + '/index.htm', '<html><body>Inno Setup rocks!</body></html>', False)
- if not ShellExecAsOriginalUser('open', IISURL + '/innosetup/index.htm', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode) then
- MsgBox('Can''t display the created virtual directory: ''' + SysErrorMessage(ErrorCode) + '''.', mbError, mb_Ok)
- end
- {--- MSXML ---}
- const
- XMLURL = 'http://jrsoftware.github.io/issrc/ISHelp/isxfunc.xml'
- XMLFileName = 'isxfunc.xml'
- XMLFileName2 = 'isxfuncmodified.xml'
- procedure MSXMLButtonOnClick(Sender: TObject)
- var
- XMLHTTP, XMLDoc, NewNode, RootNode: Variant
- Path: String
- begin
- if MsgBox('Setup will now use MSXML to download XML file ''' + XMLURL + ''' and save it to disk.'#13#13'Setup will then load, modify and save this XML file. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
- Exit
-
- { Create the main MSXML COM Automation object }
- try
- XMLHTTP := CreateOleObject('MSXML2.ServerXMLHTTP')
- except
- RaiseException('Please install MSXML first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)')
- end
-
- { Download the XML file }
- XMLHTTP.Open('GET', XMLURL, False)
- XMLHTTP.Send()
- Path := ExpandConstant('{src}\')
- XMLHTTP.responseXML.Save(Path + XMLFileName)
- MsgBox('Downloaded the XML file and saved it as ''' + XMLFileName + '''.', mbInformation, mb_Ok)
- { Load the XML File }
- XMLDoc := CreateOleObject('MSXML2.DOMDocument')
- XMLDoc.async := False
- XMLDoc.resolveExternals := False
- XMLDoc.load(Path + XMLFileName)
- if XMLDoc.parseError.errorCode <> 0 then
- RaiseException('Error on line ' + IntToStr(XMLDoc.parseError.line) + ', position ' + IntToStr(XMLDoc.parseError.linepos) + ': ' + XMLDoc.parseError.reason)
-
- MsgBox('Loaded the XML file.', mbInformation, mb_Ok)
- { Modify the XML document }
-
- NewNode := XMLDoc.createElement('isxdemo')
- RootNode := XMLDoc.documentElement
- RootNode.appendChild(NewNode)
- RootNode.lastChild.text := 'Hello, World'
- { Save the XML document }
- XMLDoc.Save(Path + XMLFileName2)
- MsgBox('Saved the modified XML as ''' + XMLFileName2 + '''.', mbInformation, mb_Ok)
- end
- {--- Word ---}
- procedure WordButtonOnClick(Sender: TObject)
- var
- Word: Variant
- begin
- if MsgBox('Setup will now check whether Microsoft Word is running. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
- Exit
- { Try to get an active Word COM Automation object }
-
- try
- Word := GetActiveOleObject('Word.Application')
- except
- end
-
- if VarIsEmpty(Word) then
- MsgBox('Microsoft Word is not running.', mbInformation, mb_Ok)
- else
- MsgBox('Microsoft Word is running.', mbInformation, mb_Ok)
- end
- {--- Windows Firewall ---}
- const
- NET_FW_IP_VERSION_ANY = 2
- NET_FW_SCOPE_ALL = 0
- procedure FirewallButtonOnClick(Sender: TObject)
- var
- Firewall, Application: Variant
- begin
- if MsgBox('Setup will now add itself to Windows Firewall as an authorized application for the current profile (' + GetUserNameString + '). Do you want to continue?', mbInformation, mb_YesNo) = idNo then
- Exit
- { Create the main Windows Firewall COM Automation object }
- try
- Firewall := CreateOleObject('HNetCfg.FwMgr')
- except
- RaiseException('Please install Windows Firewall first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)')
- end
- { Add the authorization }
- Application := CreateOleObject('HNetCfg.FwAuthorizedApplication')
- Application.Name := 'Setup'
- Application.IPVersion := NET_FW_IP_VERSION_ANY
- Application.ProcessImageFileName := ExpandConstant('{srcexe}')
- Application.Scope := NET_FW_SCOPE_ALL
- Application.Enabled := True
- Firewall.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(Application)
- MsgBox('Setup is now an authorized application for the current profile', mbInformation, mb_Ok)
- end
- {---}
- procedure CreateButton(ALeft, ATop: Integer
- begin
- with TButton.Create(WizardForm) do begin
- Left := ALeft
- Top := ATop
- Width := WizardForm.CancelButton.Width
- Height := WizardForm.CancelButton.Height
- Caption := ACaption
- OnClick := ANotifyEvent
- Parent := WizardForm.WelcomePage
- end
- end
- procedure InitializeWizard()
- var
- Left, LeftInc, Top, TopInc: Integer
- begin
- Left := WizardForm.WelcomeLabel2.Left
- LeftInc := WizardForm.CancelButton.Width + ScaleX(8)
- TopInc := WizardForm.CancelButton.Height + ScaleY(8)
- Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - 4*TopInc
- CreateButton(Left, Top, '&SQLDMO...', @SQLDMOButtonOnClick)
- CreateButton(Left + LeftInc, Top, '&Firewall...', @FirewallButtonOnClick)
- Top := Top + TopInc
- CreateButton(Left, Top, '&IIS...', @IISButtonOnClick)
- Top := Top + TopInc
- CreateButton(Left, Top, '&MSXML...', @MSXMLButtonOnClick)
- Top := Top + TopInc
- CreateButton(Left, Top, '&Word...', @WordButtonOnClick)
- end
|