Inno Setup的常用脚本
- 格式:doc
- 大小:37.50 KB
- 文档页数:8
Inno Setup制作实例:Inno Setup安装服务的代码我们编写的程序经常需要在安装的时候将它安装成服务。
使用Inno Setup如何实现呢?一下是我实现的相关代码。
希望对大家有所帮助。
{*************加入服务部分*************}//// Services functions for InnoSetup// V ersion//// The contents of this file are subject to the Mozilla Public License// V ersion (the “License”); you may not use this file except in// compliance with the License. Y ou may obtain a copy of the License at // http:///MPL///// Software distributed under the License is distributed on an “AS IS”// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the// License for the specific language governing rights and limitations// under the License.//// The Original Code is//// The Initial Developer of the Original Code is Luigi D. Sandon // Copyright ?2006-2008 Luigi D. Sandon. All Rights Reserved. ////// Note on passing PChars using RemObjects Pascal Script// …… pass a nil PChar// #0 pass an empty PChar//type_SERVICE_STA TUS = recorddwServiceType: Longword;dwCurrentState: Longword;dwControlsAccepted: Longword;dwWin32ExitCode: Longword; dwServiceSpecificExitCode: Longword;dwCheckPoint: Longword;dwWaitHint: Longword;end;constNO_ERROR = 0;STANDARD_RIGHTS_REQUIRED = $F0000;//// Service Control Manager object specific access types //SC_MANAGER_CONNECT = $0001;SC_MANAGER_CREA TE_SERVICE = $0002;SC_MANAGER_ENUMERA TE_SERVICE = $0004; SC_MANAGER_LOCK = $0008;SC_MANAGER_QUERY_LOCK_STA TUS = $0010; SC_MANAGER_MODIFY_BOOT_CONFIG = $0020; SC_MANAGER_ALL_ACCESS =(STANDARD_RIGHTS_REQUIRED +SC_MANAGER_CONNECT +SC_MANAGER_CREA TE_SERVICE +SC_MANAGER_ENUMERA TE_SERVICE +SC_MANAGER_LOCK +SC_MANAGER_QUERY_LOCK_STA TUS +SC_MANAGER_MODIFY_BOOT_CONFIG);//// No change constant//SERVICE_NO_CHANGE = $FFFFFFFF;// Service Types (Bit Mask)//SERVICE_KERNEL_DRIVER = $00000001; SERVICE_FILE_SYSTEM_DRIVER = $00000002; SERVICE_ADAPTER = $00000004;SERVICE_RECOGNIZER_DRIVER = $00000008; SERVICE_DRIVER =(SERVICE_KERNEL_DRIVER +SERVICE_FILE_SYSTEM_DRIVER +SERVICE_RECOGNIZER_DRIVER);SERVICE_WIN32_OWN_PROCESS = $00000010; SERVICE_WIN32_SHARE_PROCESS = $00000020; SERVICE_WIN32 =(SERVICE_WIN32_OWN_PROCESS + SERVICE_WIN32_SHARE_PROCESS); SERVICE_INTERACTIVE_PROCESS = $00000100; SERVICE_TYPE_ALL =(SERVICE_WIN32 +SERVICE_ADAPTER +SERVICE_DRIVER +SERVICE_INTERACTIVE_PROCESS);// Start Type//SERVICE_BOOT_START = $00000000; SERVICE_SYSTEM_START = $00000001; SERVICE_AUTO_START = $00000002; SERVICE_DEMAND_START = $00000003; SERVICE_DISABLED = $00000004;//// Error control type//SERVICE_ERROR_IGNORE = $00000000; SERVICE_ERROR_NORMAL = $00000001; SERVICE_ERROR_SEVERE = $00000002; SERVICE_ERROR_CRITICAL = $00000003;//// Service object specific access type//SERVICE_QUERY_CONFIG = $0001; SERVICE_CHANGE_CONFIG = $0002; SERVICE_QUERY_STA TUS = $0004; SERVICE_ENUMERA TE_DEPENDENTS = $0008;SERVICE_START= $0010;SERVICE_STOP= $0020;SERVICE_PAUSE_CONTINUE = $0040; SERVICE_INTERROGA TE = $0080;SERVICE_USER_DEFINED_CONTROL = $0100; SERVICE_ALL_ACCESS =(STANDARD_RIGHTS_REQUIRED + SERVICE_QUERY_CONFIG +SERVICE_CHANGE_CONFIG +SERVICE_QUERY_STA TUS +SERVICE_ENUMERA TE_DEPENDENTS + SERVICE_START +SERVICE_STOP +SERVICE_PAUSE_CONTINUE +SERVICE_INTERROGA TE +SERVICE_USER_DEFINED_CONTROL);//// Controls//SERVICE_CONTROL_STOP = $00000001; SERVICE_CONTROL_PAUSE = $00000002; SERVICE_CONTROL_CONTINUE = $00000003;SERVICE_CONTROL_INTERROGA TE = $00000004; //// Status//SERVICE_CONTINUE_PENDING = $00000005; SERVICE_PAUSE_PENDING = $00000006; SERVICE_PAUSED = $00000007;SERVICE_RUNNING = $00000004;SERVICE_START_PENDING = $00000002; SERVICE_STOP_PENDING = $00000003; SERVICE_STOPPED = $00000001;//// Error codes//ERROR_DEPENDENT_SERVICES_RUNNING = 1051; ERROR_INV ALID_SERVICE_CONTROL = 1052; ERROR_SERVICE_REQUEST_TIMEOUT = 1053; ERROR_SERVICE_NO_THREAD = 1054;ERROR_SERVICE_DA TABASE_LOCKED = 1055; ERROR_SERVICE_ALREADY_RUNNING = 1056; ERROR_INV ALID_SERVICE_ACCOUNT = 1057; ERROR_SERVICE_DISABLED = 1058;ERROR_CIRCULAR_DEPENDENCY = 1059;ERROR_SERVICE_DOES_NOT_EXIST = 1060;ERROR_SERVICE_CANNOT_ACCEPT_CTRL = 1061; ERROR_SERVICE_NOT_ACTIVE = 1062;ERROR_FAILED_SERVICE_CONTROLLER_CONNECT = 1063; ERROR_EXCEPTION_IN_SERVICE = 1064;ERROR_DA TABASE_DOES_NOT_EXIST = 1065;ERROR_SERVICE_SPECIFIC_ERROR = 1066;ERROR_PROCESS_ABORTED = 1067;ERROR_SERVICE_DEPENDENCY_FAIL = 1068;ERROR_SERVICE_LOGON_FAILED = 1069;ERROR_SERVICE_START_HANG = 1070;ERROR_INV ALID_SERVICE_LOCK = 1071;ERROR_SERVICE_MARKED_FOR_DELETE = 1072;ERROR_SERVICE_EXISTS = 1073;function OpenSCManager(lpMachineName: string;lpDatabaseName: string;dwDesiredAccess: Longword): Longword;external …OpenSCManagerA@ stdcall‟;//// lpServiceName is the service name, not the service display name//function OpenService(hSCManager: Longword;lpServiceName: string;dwDesiredAccess: Longword): Longword;external …OpenServiceA@ stdcall‟;function StartService(hService: Longword;dwNumServiceArgs: Longword;lpServiceArgV ectors: PChar): Longword;external …StartServiceA@ stdcall‟;function CloseServiceHandle(hSCObject: Longword): Longword; external …CloseServiceHandle@ stdcall‟;function ControlService(hService: Longword;dwControl: Longword;var lpServiceStatus: _SERVICE_STA TUS): Longword; external …ControlService@ stdcall‟;function CreateService(hSCManager: Longword; lpServiceName: string;lpDisplayName: string;dwDesiredAccess: Longword;dwServiceType: Longword;dwStartType: Longword;dwErrorControl: Longword;lpBinaryPathName: string;lpLoadOrderGroup: string;lpdwTagId: Longword;lpDependencies: string;lpServiceStartName: string;lpPassword: string): Longword;external …CreateServiceA@ stdcall‟;function DeleteService(hService: Longword): Longword; external …DeleteService@ stdcall‟;function ChangeServiceConfig(hService: Longword;dwServiceType: Longword;dwStartType: Longword;dwErrorControl: Longword;lpBinaryPathName: PChar;lpLoadOrderGroup: PChar;lpdwTagId: Longword;lpDependencies: PChar;lpServiceStartName: PChar;lpPassword: PChar;lpDisplayName: PChar): Longword;external …ChangeServiceConfigA@ stdcall‟;function LockServiceDatabase(hSCManager: Longword): Longword; external …LockServiceDatabase@ stdcall‟;function UnlockServiceDatabase(ScLock: Longword): Longword; external …UnlockServiceDatabase@ stdcall‟;function SimpleCreateService(AServiceName,ADisplayName,AFileName: string;AStartType: Longword;AUser, APassword: string;Interactive: Boolean;IgnoreExisting: Boolean): Boolean;varSCMHandle: Longword;ServiceHandle: Longword;ServiceType: Longword;Error: Integer;beginResult := False;ServiceType := SERVICE_WIN32_OWN_PROCESS;trySCMHandle := OpenSCManager(……, ……, SC_MANAGER_ALL_ACCESS);if SCMHandle = 0 thenRaiseException(…OpenSCManager@SimpleCreateService: … + AServiceName + … … +SysErrorMessage(DLLGetLastError));tryif AUser = …… thenbeginif Interactive thenServiceType := ServiceType + SERVICE_INTERACTIVE_PROCESS; APassword := ……;end;ServiceHandle := CreateService(SCMHandle, AServiceName, ADisplayName,SERVICE_ALL_ACCESS, ServiceType, AStartType, SERVICE_ERROR_NORMAL,AFileName, ……, 0, ……, AUser, APassword);if ServiceHandle = 0 thenbeginError := DLLGetLastError;if IgnoreExisting and (Error = ERROR_SERVICE_EXISTS) thenExitelseRaiseException(…CreateService@SimpleCreateService: … + AServiceName +… … + SysErrorMessage(Error));end;Result := True;finallyif ServiceHandle 0 thenCloseServiceHandle(ServiceHandle);end;finallyif SCMHandle 0 thenCloseServiceHandle(SCMHandle);end;end;function WaitForService(ServiceHandle: Longword; AStatus: Longword): Boolean;varPendingStatus: Longword;ServiceStatus: _SERVICE_STA TUS;Error: Integer;beginResult := False;case AStatus ofSERVICE_RUNNING: PendingStatus := SERVICE_START_PENDING;SERVICE_STOPPED: PendingStatus := SERVICE_STOP_PENDING; end;repeatif ControlService(ServiceHandle, SERVICE_CONTROL_INTERROGA TE, ServiceStatus) = 0 then beginError := DLLGetLastError;RaiseException(…ControlService@WaitForService: … + SysErrorMessage(Error));end;if 0 thenBreak;Result := = AStatus;if not Result and ( = PendingStatus) thenSleep()elseBreak;until Result;end;procedure SimpleStopService(AService: string; Wait, IgnoreStopped: Boolean);varServiceStatus: _SERVICE_STA TUS;SCMHandle: Longword;ServiceHandle: Longword;Error: Integer;begintrySCMHandle := OpenSCManager(……, ……, SC_MANAGER_ALL_ACCESS);if SCMHandle = 0 thenRaiseException(…OpenSCManager@SimpleStopService: … + AService + … … +SysErrorMessage(DLLGetLastError));tryServiceHandle := OpenService(SCMHandle, AService, SERVICE_ALL_ACCESS);if ServiceHandle = 0 thenRaiseExcept ion(…OpenService@SimpleStopService: … + AService + … … +SysErrorMessage(DLLGetLastError));tryif ControlService(ServiceHandle, SERVICE_CONTROL_STOP, ServiceStatus) = 0 thenbeginError := DLLGetLastError;if IgnoreStopped and (Error = ERROR_SERVICE_NOT_ACTIVE) thenExitelseRaiseException(…ControlService@SimpleStopService: … + AService + … … +SysErrorMessage(Error));if Wait thenWaitForService(ServiceHandle, SERVICE_STOPPED);end;finallyif ServiceHandle 0 thenCloseServiceHandle(ServiceHandle);end;finallyif SCMHandle 0 thenCloseServiceHandle(SCMHandle);end;exceptShowExceptionMessage;end;end;procedure SimpleStartService(AService: string; Wait, IgnoreStarted: Boolean);varSCMHandle: Longword;ServiceHandle: Longword;Error: Integer;begintrySCMHandle := OpenSCManager(……, ……, SC_MANAGER_ALL_ACCESS);if SCMHandle = 0 thenRaiseException(…OpenSCManager@SimpleStartService: … + AService + … … +SysErrorMessage(DLLGetLastError));tryServiceHandle := OpenService(SCMHandle, AService, SERVICE_ALL_ACCESS);if ServiceHandle = 0 thenRaiseException(…OpenService@SimpleStartService: … + AService + … … +SysErrorMessage(DLLGetLastError));tryif StartService(ServiceHandle, 0, ……) = 0 thenbeginError := DLLGetLastError;if IgnoreStarted and (Error = ERROR_SERVICE_ALREADY_RUNNING) thenExitelseRaiseException(…StartService@SimpleStartService: … + AService + … … + SysErrorMessage(Error));if Wait thenbeginWaitForService(ServiceHandle, SERVICE_RUNNING);end;end;finallyif ServiceHandle 0 thenCloseServiceHandle(ServiceHandle);end;finallyif SCMHandle 0 thenCloseServiceHandle(SCMHandle);end;exceptShowExceptionMessage;end;end;procedure SimpleDeleteService(AService: string);varSCMHandle: Longword;ServiceHandle: Longword;begintrySCMHandle := OpenSCManager(……, ……, SC_MANAGER_ALL_ACCESS);if SCMHandle = 0 thenRaiseException(…OpenSCManager@SimpleDeleteService: … + AService + … … +SysErrorMessage(DLLGetLastError));tryServiceHandle := OpenService(SCMHandle, AService, SERVICE_ALL_ACCESS);if ServiceHandle = 0 thenRaiseException(…OpenService@SimpleDeleteService: … + AService + … … +SysErrorMessage(DLLGetLastError));tryif DeleteService(ServiceHandle) = 0 thenRaiseException(…StartService@SimpleDeleteService: … + AService + … … +SysErrorMessage(DLLGetLastError));finallyif ServiceHandle 0 thenCloseServiceHandle(ServiceHandle);end;finallyif SCMHandle 0 thenCloseServiceHandle(SCMHandle);end;exceptShowExceptionMessage;end;end;procedure SimpleSetServiceStartup(AService: string; AStartupType: Longword);varSCMHandle: Longword;ServiceHandle: Longword;begintrySCMHandle := OpenSCManager(……, ……, SC_MANAGER_ALL_ACCESS);if SCMHandle = 0 thenRaiseException(…SimpleSetServiceStartup@OpenSCManager: … + AService + … … +SysErrorMessage(DLLGetLastError));tryServiceHandle := OpenService(SCMHandle, AService, SERVICE_ALL_ACCESS);if ServiceHandle = 0 thenRaiseException(…SimpleSetServiceStartup@OpenService: … + AService + … … +SysErrorMessage(DLLGetLastError));tryif ChangeServiceConfig(ServiceHandle, SERVICE_NO_CHANGE, AStartupType, SERVICE_NO_CHANGE,……, ……, 0, ……, ……, ……, ……) = 0 thenRaiseException(…SimpleSetServiceStartup@SetServiceStartup: … + AService + … … +SysErrorMessage(DLLGetLastError));finallyif ServiceHandle 0 thenCloseServiceHandle(ServiceHandle);end;finallyif SCMHandle 0 thenCloseServiceHandle(SCMHandle);end;exceptShowExceptionMessage;end;end;function ServiceExists(AService: string): Boolean;varSCMHandle: Longword;ServiceHandle: Longword;Error: Integer;begintrySCMHandle := OpenSCManager(……, ……, SC_MANAGER_ALL_ACCESS);if SCMHandle = 0 thenRaiseException(…OpenSCManager@ServiceExists: … + AService + … … + SysErrorMessage(DLLGetLastError));tryServiceHandle := OpenService(SCMHandle, AService, SERVICE_ALL_ACCESS);tryif ServiceHandle = 0 thenbeginError := DLLGetLastError;if Error = ERROR_SERVICE_DOES_NOT_EXIST thenResult := FalseelseRaiseException(…OpenService@ServiceExists: … + AService + … … + SysErrorMessage(Error));endelseResult := True;finallyif ServiceHandle 0 thenCloseServiceHandle(ServiceHandle);end;finallyif SCMHandle 0 thenCloseServiceHandle(SCMHandle);end;exceptShowExceptionMessage;end;end;function SimpleQueryService(AService: string): Longword;varServiceStatus: _SERVICE_STA TUS;SCMHandle: Longword;ServiceHandle: Longword;Error: Integer;beginResult := 0;trySCMHandle := OpenSCManager(……, ……, SC_MANAGER_ALL_ACCESS);if SCMHandle = 0 thenRaiseException(…OpenSCManager@SimpleQueryService: … + AService + … … +SysErrorMessage(DLLGetLastError));tryServiceHandle := OpenService(SCMHandle, AService, SERVICE_ALL_ACCESS);if ServiceHandle = 0 thenRaiseException(…OpenService@SimpleQueryService: … + AService + … … +SysErrorMessage(DLLGetLastError));tryif ControlService(ServiceHandle, SERVICE_CONTROL_INTERROGA TE, ServiceStatus) = 0 then beginError := DLLGetLastError;RaiseException(…ControlService@SimpleQueryService: … + AService + … … +SysErrorMessage(Error));end;Result := ;finallyif ServiceHandle 0 thenCloseServiceHandle(ServiceHandle);end;finallyif SCMHandle 0 thenCloseServiceHandle(SCMHandle);end;exceptShowExceptionMessage;end;end;procedure DeinitializeSetup ();varsPath: String;beginif ServiceExists(服务名称) = false thenbeginsPath := ExpandConstant(…{app}‟);if SimpleCreateService(服务名称, ……, 所在路径, 启动方式, ……,‟‟, true, false) = true thenbegin//服务已经安装完成,启动服务SimpleStartService(服务名称, true, false);end;endelsebeginif MsgBox(…服务已经存在,您是否确定要首先删除您以前的服务?‟, mbConfirmation, MB_YESNO) = IDYES thenbeginSimpleDeleteService(服务名称);endelsebeginExit;end;sPath := ExpandConstant(…{app}‟);if SimpleCreateService(服务名称, ……, 所在路径, 启动方式, ……,‟‟, true,false) = true thenbegin//服务已经安装完成,启动服务SimpleStartService(服务名称, true, false);end;end;end;使用以上代码安装后就可以将应用程序安装成服务来运行了。
innosetup 打印参数Inno Setup 是一个功能强大的安装程序制作工具,它允许开发人员创建易于使用的安装程序。
在 Inno Setup 中,打印参数通常指的是在安装过程中打印日志或者调试信息的参数。
在 Inno Setup 脚本中,可以使用以下几种方式来打印参数:1. 使用 `Log` 函数,Inno Setup 提供了 `Log` 函数,可以在安装过程中打印日志信息。
例如,可以在脚本中使用类似于`Log('Installing component XYZ')` 的语句来打印安装过程中的相关信息。
2. 使用 `MsgBox` 函数,`MsgBox` 函数可以在安装过程中弹出消息框,显示特定的信息。
这也是一种打印参数的方式,可以在安装过程中显示调试信息或者提示信息。
3. 使用 `/LOG` 参数,在运行 Inno Setup 编译后的安装程序时,可以使用 `/LOG` 参数来指定日志文件的路径,从而将安装过程中的信息保存到日志文件中。
例如,可以使用类似于 `Setup.exe /LOG="install.log"` 的命令来启动安装并将日志信息保存到`install.log` 文件中。
4. 使用 `/VERYSILENT /LOG` 参数,在静默安装模式下,可以使用 `/VERYSILENT /LOG` 参数来指定安装过程中的日志文件路径,并将所有安装过程中的信息记录到指定的日志文件中。
总的来说,在 Inno Setup 中,可以通过调用特定的函数、使用命令行参数等方式来打印参数,从而实现在安装过程中记录日志或者调试信息的目的。
这些方法可以帮助开发人员更好地了解安装过程中的细节,以便进行调试和故障排除。
innosetupcode段常用代码1 、如何让协议许可页面默认选中我同意按钮[code]procedure InitializeWizard();beginWizardForm.LICENSEACCEPTEDRADIO.Checked := true;end;2、自定义安装程序右上角图片大小[code]procedure InitializeWizard();beginWizardForm.WizardSmallBitmapImage.width:=150; //设置页眉图片的大小WizardForm.WizardSmallBitmapImage.left:=WizardForm.wi dth-150; //设置左边页眉留出的空隙WizardForm.PAGENAMELABEL.width:=0; //设置标题文字显示的大小WizardForm.PAGEDESCRIPTIONLABEL.width:=0; //设置标题文字显示的大小end;// 或者自定义安装向导小图片[code]procedure InitializeWizard();beginWizardform.WizardSmallBitmapImage.left:= WizardForm.width-164; //自定义安装向导小图片显示位置WizardForm.WizardSmallBitmapImage.width:=164; //自定义安装向导小图片宽度Wizardform.PageNameLabel.width:= 495 - 164 -36; //这儿必须定义,数值根据图片宽度更改,显示软件名称的位置Wizardform.PageDescriptionLabel.width:= 495 - 164 -42; //显示页面信息的位置end;3、自定BeveledLabel显示代码[code]procedure InitializeWizard();beginWizardForm.BeveledLabel.Enabled:=true; //允许显示WizardForm.BeveledLabel.Font.Color:=$00058451;; //显示颜色WizardForm.BeveledLabel.Font.Style := WizardForm.BeveledLabel.Font.Style + [fsBold]; //显示字体WizardForm.BeveledLabel.Left:=5; //显示位置end;4、自定义安装向导图片[code]procedure InitializeWizard();beginWizardform.WELCOMELABEL1.left:= 18; //自定义欢迎页面标题1显示位置Wizardform.WELCOMELABEL2.left:= 18; //自定义欢迎页面标题2显示位置Wizardform.WizardBitmapImage.left:= WizardForm.width-164 //自定义安装向导图片显示位置(显示大小,此处为居右显示) end;5、显示出组件选择框[Types]Name: full; Description: 推荐Name: default; Description: 典型Name: custom; Description: 自定义; Flags: iscustom;告诉安装程序这个类型是自定义类型。
1 、如何让协议许可页面默认选中我同意按钮[code]procedure InitializeWizard();beginWizardForm.LICENSEACCEPTEDRADIO.Checked := true;end;2、自定义安装程序右上角图片大小[code]procedure InitializeWizard();beginWizardForm.WizardSmallBitmapImage.width:=150; //设置页眉图片的大小WizardForm.WizardSmallBitmapImage.left:=WizardForm.width-150; //设置左边页眉留出的空隙WizardForm.PAGENAMELABEL.width:=0; //设置标题文字显示的大小WizardForm.PAGEDESCRIPTIONLABEL.width:=0; //设置标题文字显示的大小end;// 或者自定义安装向导小图片[code]procedure InitializeWizard();beginWizardform.WizardSmallBitmapImage.left:= WizardForm.width-164; //自定义安装向导小图片显示位置WizardForm.WizardSmallBitmapImage.width:=164; //自定义安装向导小图片宽度Wizardform.PageNameLabel.width:= 495 - 164 -36; //这儿必须定义,数值根据图片宽度更改,显示软件名称的位置Wizardform.PageDescriptionLabel.width:= 495 - 164 -42; //显示页面信息的位置end;3、自定BeveledLabel显示代码[code]procedure InitializeWizard();beginWizardForm.BeveledLabel.Enabled:=true; //允许显示WizardForm.BeveledLabel.Font.Color:=$00058451;; //显示颜色WizardForm.BeveledLabel.Font.Style := WizardForm.BeveledLabel.Font.Style + [fsBold]; //显示字体WizardForm.BeveledLabel.Left:=5; //显示位置end;4、自定义安装向导图片[code]procedure InitializeWizard();beginWizardform.WELCOMELABEL1.left:= 18; //自定义欢迎页面标题1显示位置Wizardform.WELCOMELABEL2.left:= 18; //自定义欢迎页面标题2显示位置Wizardform.WizardBitmapImage.left:= WizardForm.width-164 //自定义安装向导图片显示位置(显示大小,此处为居右显示)end;5、显示出组件选择框[Types]Name: full; Description: 推荐Name: default; Description: 典型Name: custom; Description: 自定义; Flags: iscustom;告诉安装程序这个类型是自定义类型。
inno setup 用法Inno Setup 是一个用于创建Windows 安装程序的免费、开源的工具。
以下是Inno Setup 的基本用法和一些常见任务的示例:1. 安装Inno Setup:2. 创建脚本文件:- Inno Setup 使用脚本文件(通常以`.iss` 结尾)来定义安装程序的配置。
创建一个简单的文本文件,然后使用以下示例作为基础:```iss; 示例Inno Setup 脚本文件[Setup]AppName=MyAppAppVersion=1.0DefaultDirName={pf}\MyAppOutputDir=OutputOutputBaseFilename=Setup[Files]Source: "MyApp.exe"; DestDir: "{app}"[Icons]Name: "{group}\MyApp"; Filename: "{app}\MyApp.exe"```3. 配置安装程序:-修改`[Setup]` 部分以配置安装程序的基本信息,例如应用程序名称、版本号、安装目录等。
-在`[Files]` 部分添加要包含在安装程序中的文件。
4. 编译脚本:-保存脚本文件并使用Inno Setup Compiler 编译脚本。
这将生成一个可执行的安装程序。
5. 运行安装程序:-运行生成的安装程序,按照指导完成安装过程。
6. 其他任务示例:-添加图标到桌面:```iss[Icons]Name: "{commondesktop}\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: desktopicon```-添加开始菜单项:```iss[Icons]Name: "{commonstartmenu}\Programs\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: desktopicon```-创建卸载程序:```iss[UninstallDelete]Type: filesandordirs; Name: "{app}"```-自定义界面:```iss[Code]procedure InitializeWizard;varCustomPage: TWizardPage;beginCustomPage := CreateCustomPage(wpWelcome, 'Custom Page', 'Select Additional Options');// Add custom controls to CustomPageend;```-运行自定义脚本:```iss[Run]Filename: "{app}\MyApp.exe"; Description: "Run MyApp"; Flags: postinstall nowait```。
inno setup uninsneveruninstall的使用方法### Inno Setup UninsNeverUninstall 选项的使用方法Inno Setup 是一款广受欢迎的免费安装制作工具,它允许开发者创建用于分发软件的安装包。
`UninsNeverUninstall` 是Inno Setup 中的一个设置选项,当启用这个选项时,它允许用户在“添加/删除程序”中看到卸载选项,但实际上禁止用户卸载程序。
这在某些特定情境下非常有用,比如当软件与系统其他部分紧密集成,或者出于安全考虑不希望用户随意卸载时。
以下是如何在Inno Setup 中使用`UninsNeverUninstall` 选项的详细指南:#### 1.设置脚本在使用`UninsNeverUninstall` 之前,你需要编写Inno Setup 脚本。
以下是包含此选项的脚本示例:```iss[Setup]AppName=MyAppAppVersion=1.0DefaultDirName={pf}MyAppUninsNeverUninstall=True[Files]Source: "C:pathtoyourfile.exe"; DestDir: "{app}"; Flags: ignoreversion [Icons]ame: "{commonprograms}MyAppMyApp"; Filename: "{app}file.exe"[Run]Filename: "{app}file.exe"; Description:"{cm:LaunchProgram,MyApp}"; Flags: nowait postinstall skipifsilent ```#### 2.解释脚本选项- `[Setup]` 段:在这里设置你的应用程序信息。
Inno Setup入门(十二)——Pascal脚本事件函数Inno Setup支持以下函数和过程。
function InitializeSetup():Boolean;该函数在安装程序初始化时调用,返回False将中断安装,True则继续安装,测试代码如下:function InitializeSetup():Boolean;beginResult:=MsgBox('安装程序正在初始化,你确定要安装吗?',mbConfirmation,MB_YESNO)=idYes;if Result=False thenMsgBox('你放弃了安装,程序直接退出',mbInformation,MB_OK);end;procedure InitializeWizard();该过程在开始的时候改变向导或者向导页,不要指望使用InitializeSetup函数实现改变向导页的功能,因为InitializeSetup函数触发时向导窗口并不存在。
procedure DeinitializeSetup();该过程在安装终止时被调用,注意及时在用户没有安装任何文件之前退出也会被调用。
测试代码如下:procedure DeinitializeSetup();beginmsgbox('DeinitializeSetup is called',mbInformation,MB_OK);end;procedure CurStepChanged(CurStep:TSetupStep);该过程提供用户完成预安装和安装之后的任务,更多的是提供了安装过程中的状态。
参数CurStep=ssInstall是在程序实际安装前(所有的路径等都配置好之后准备写入文件钱),CurStep=ssPostInstall是实际安装完成后,而CurStep=ssDone是在一次成功的安装完成后、安装程序终止前(即点击finish按钮后执行)。
如何使用:•文档约定•创建安装程序•创建脚本•段内参数•一些常量•公共参数•安装脚本段o[Setup] 段o[Dirs] 段o[Files] 段o[Icons] 段o[INI] 段o[InstallDelete] 段o[Messages] 段o[Registry] 段o[Run] 段o[UninstallDelete] 段o[UninstallRun] 段其它问题:•其它注意事项•在命令行执行编译器•安装命令行参数文档约定"Windows 95/NT 4+"这是 Windows 95, 98, NT 4.0, 2000 以及更高版本的简称。
"Windows 98/NT 4+"这是 Windows 98, NT 4.0, 2000 以及更高版本的简称。
"Windows NT"无论何时提及 Windows NT,除非有其他说明,他总是包括 Windows 2000(亦即 NT 5.0)。
等宽字体当你看见文档里的等宽字体,说明他是脚本文件的引用。
创建安装程序安装程序是以脚本(script)的方式来创建的。
(不要一看见“脚本”这个术语就害怕,你只需要花上几分钟的时间就可以掌握它的要领!)该脚本文件的扩展名是“.iss”(意思是 Inno Setup Script)。
脚本文件控制了安装程序的每一个外观界面。
它指定了哪些文件要被复制及其位置,创建什么应用程序图标和为它们命名等等。
脚本文件通常可以用安装编译程序内建的编辑器来创建和编辑,完成以后写入脚本文件,下一步也是最后一步是在安装编译器的菜单里选择“编译”(Compile)。
创建完成以后该干什么呢?准备运行这个基于该脚本的安装程序吧!默认情况下,这个文件被创建在脚本文件所在文件夹的“OUTPUT”子文件夹下。
要了解脚本文件是如何工作的,运行安装编译器,单击“文件\打开”选择一个位于 Inno Setup 文件夹的 Samples 子文件夹下的示例脚本文件。
inno setup 常用函数Inno Setup 是一个用于创建 Windows 安装程序的开源软件,它提供了丰富的函数和工具来定制和管理安装过程。
以下是一些Inno Setup 中常用的函数:1. MsgBox,用于显示一个消息框,可以用来向用户显示信息、警告或错误消息。
2. FileExists,用于检查文件是否存在。
3. FileCopy,用于复制文件。
4. FileDelete,用于删除文件。
5. DirExists,用于检查目录是否存在。
6. CreateDir,用于创建目录。
7. DeleteFileOnReboot,用于在系统重启时删除文件。
8. RegQueryStringValue,用于从注册表中读取字符串值。
9. RegWriteStringValue,用于向注册表中写入字符串值。
10. GetFileVersion,用于获取文件的版本信息。
11. GetWindowsVersion,用于获取 Windows 的版本信息。
12. ShellExec,用于执行外部命令或打开文件。
13. GetEnv,用于获取系统环境变量的值。
14. SetIniString,用于向 INI 文件中写入字符串值。
15. GetMD5OfFile,用于获取文件的 MD5 校验值。
这些函数可以帮助开发人员在安装过程中完成各种任务,例如文件操作、注册表操作、系统信息获取等。
当然,Inno Setup 还提供了许多其他的函数和工具,开发人员可以根据自己的需求选择合适的函数来完成定制化的安装程序开发。
希望这些信息能够帮助到你。
Inno Setup 入门作者:CastorInno Setup入门(一)——最简单的安装脚本一个最简单的安装脚本:1.最简单的安装文件脚本:[setup]AppName=TestAppVerName=TESTDefaultDirName="E:\TEST"AppVersion=1.0[files]Source: "F:\desktop\ipmsg.exe"; DestDir: "{app}"编译完成后在脚本文件所在的目录下生成一个Output的文件夹,其中包含了生成好的安装文件:运行安装文件,一路安装到底,将会安装到在E:\TEST下:除了主安装程序,另外两个文件分别是我们的测试文件和卸载程序。
可见一个傻瓜化的安装文件就这么搞定了。
Inno Setup入门(二)——修改安装过程中的图片修改安装过程中的图片一般编译之后,安装过程中出现在左边图片是是下图这个样子的:其实也可以修改它,只需要在setup段中作一点稍微的修改,加一行代码即可:[setup]AppName=TestAppVerName=TESTDefaultDirName="E:\TEST"AppVersion=1.0WizardImageFile=dh.bmp[files]Source: "F:\desktop\ipmsg.exe"; DestDir: "{app}"注意上面加粗的一行即是设置图片的代码,图片必须放在脚本文件相同的目录下,如果不是,需要提供完整的路径,并且必须是BMP的位图,手册上规定图片的最大尺寸是164x314 pixels,但是稍微超出似乎也没有什么问题。
效果如下:另外一个图片的位置也说明一下,即安装过程中还会出现窗口右上方的小图片:这个小图片对应的项是WizardSmallImageFile,该图片的最大尺寸是55x58 pixels,修改方法和上面类似,下面是修改后的效果:Inno Setup入门(三)——指定压缩方式Setup段中的compression指定了采用的压缩方式,较高的压缩率需要较多的时间或者需要更大的内存空间,可用的值如下:zipzip/1到zip/9bzipbzip/1 到bzip/9lzmalzma/fastlzma/normallzma/maxlzma/ultralzma/ultra64lzma2lzma2/fastlzma2/normallzma2/maxlzma2/ultralzma2/ultra64none其中lzma2/max是编译器使用的默认压缩方式,另外,lzma/ultra、lzma/ultra64、lzma2/ultra和lzma2/ultra64在使用前需要审查一下内存需求。
inno setup initializeuninstallprogressform -回复题目:Inno Setup InitializeUninstallProgressForm一、什么是Inno Setup InitializeUninstallProgressFormInno Setup是一个免费的、开源的安装脚本创建工具,用于在Windows 操作系统上创建安装程序。
InitializeUninstallProgressForm是其中的一个函数,用于初始化卸载进度窗体。
二、初始化卸载进程窗体的重要性在用户进行软件卸载时,卸载进程窗体是非常重要的,它显示了卸载的进度和相关信息,帮助用户了解卸载的进行情况。
初始化卸载进程窗体是确保卸载过程的顺利进行的关键步骤。
三、InitializeUninstallProgressForm函数的作用InitializeUninstallProgressForm函数是Inno Setup提供的一个内置函数,用于初始化卸载进程窗体。
通过这个函数,可以设置卸载进度窗体的相关属性,如窗体标题、进度条样式、取消按钮等。
四、InitializeUninstallProgressForm函数的使用方法1. 在Inno Setup脚本中,找到[Code]部分,添加以下代码示例:pascalprocedure InitializeUninstallProgressForm();begin设置卸载进程窗体的相关属性WizardForm.UninstallProgressForm.Caption := '正在卸载...'; WizardForm.UninstallProgressForm.ProgressGauge.Style := npbstMarquee;WizardForm.UninstallProgressForm.CancelButton.Visible := True; end;2. 在[Code]部分中的initialize函数中,调用InitializeUninstallProgressForm函数:pascalprocedure InitializeWizard();begin其他初始化代码InitializeUninstallProgressForm();end;通过上述代码,我们完成了InitializeUninstallProgressForm函数的使用。
innosetup 命令行参数
Inno Setup 是一个用于创建 Windows 安装程序的强大工具。
通过使用 Inno Setup 命令行参数,您可以在不打开图形界面的情况下执行安装程序的编译和安装操作。
这使得自动化安装过程变得更加简单和高效。
以下是一些常用的 Inno Setup 命令行参数:
1. /cc,编译脚本文件。
例如,您可以使用命令 inno setup /cc "C:\MySetupScript.iss" 来编译名为 MySetupScript.iss 的安装脚本文件。
2. /l,指定编译日志文件的路径。
使用此参数可以将编译过程中的日志信息保存到指定的文件中,以便后续分析和排查问题。
3. /s,无人值守模式。
通过使用此参数,您可以在不需要用户交互的情况下执行安装程序。
这对于批量部署和自动化安装非常有用。
4. /d,定义常量。
使用此参数可以在编译过程中为脚本文件定
义常量,例如 inno setup /dMyConstant="MyValue"。
5. /r,记录安装过程。
通过使用此参数,您可以在安装程序执行过程中记录安装过程的详细信息,以便进行故障排除和分析。
通过灵活使用这些命令行参数,您可以轻松地定制和管理 Inno Setup 安装程序的编译和安装过程,从而实现更加高效和便捷的软件部署。
希望这些命令行参数能够帮助您更好地利用 Inno Setup 工具进行 Windows 安装程序的开发和管理。
inno setup拷贝文件夹收藏、脚本范例分析:先来看看一段用INNO SETUP脚本向导创建的基本脚本的[Setup]段:[Setup]AppName=Premiere 6.5 汉化补丁-----------------(程序名称) AppVerName=Premiere 6.5 汉化补丁------------(程序名称+版本) AppPublisher=浩子工作室----------------------------(开发单位或作者)AppPublisherURL=------(开发单位或作者网址)AppSupportURL=-------(技术服务网址)AppUpdatesURL=-------(更新升级网址) DefaultDirName={pf}\Adobe\Premiere 6.5-----(默认安装路径,{pf}就是“Program files”文件夹)DefaultGroupName=Premiere 6.5 汉化补丁----(默认添加在开始菜单中的项目名称)AllowNoIcons=yes--------------------------------------(创建快捷方式图标)LicenseFile=D:\汉化\许可文件.txt------------------(显示许可协议)InfoBeforeFile=D:\汉化\汉化说明.txt-------------(显示软件说明) OutputDir=成品-----------------------------------------(安装程序存放位置)OutputBaseFilename=Premiere 6.5 汉化补丁--(安装程序名称)SetupIconFile=汉.ico----------------------------------(安装程序图标)Compression=lzma-------------------------------------(压缩器:Lzma)SolidCompression=yes--------------------------------(压缩方式:一次性压缩)括号里内容是笔者添加的注释,我想大家应该能够理解。
inno setup 调用函数在Inno Setup中,调用函数是通过使用内置的函数或者自定义的函数来实现的。
内置函数是Inno Setup提供的一些预定义的函数,用于执行各种任务,比如文件操作、注册表操作、字符串处理等。
你可以在Inno Setup的官方文档中找到完整的内置函数列表以及它们的用法和示例。
要调用内置函数,你可以直接在脚本中使用函数名和参数来调用它们。
比如,如果你想要在安装过程中创建一个文件夹,你可以使用内置函数CreateDir来实现。
示例代码如下:pascal.[Code]function InitializeSetup(): Boolean;begin.// 在安装过程开始时创建一个文件夹。
CreateDir('C:\MyFolder');Result := True;end;除了内置函数,你还可以在Inno Setup中定义和调用自定义函数。
自定义函数可以让你封装一些常用的操作或者实现一些定制化的功能,以便在安装过程中重复使用。
要定义自定义函数,你可以在脚本中使用[Code]部分,并在其中编写函数的代码。
然后在安装过程中通过函数名和参数来调用自定义函数。
示例代码如下:pascal.[Code]function MyCustomFunction(param: string): Boolean;begin.// 在这里编写自定义函数的代码。
// 可以包含任意的操作和逻辑。
// 这里只是一个示例,你可以根据需求来定义自定义函数。
MsgBox('参数值为: ' + param, mbInformation, MB_OK); Result := True;end;function InitializeSetup(): Boolean;begin.// 调用自定义函数。
MyCustomFunction('Hello, World!');Result := True;end;总的来说,在Inno Setup中调用函数是通过使用内置函数或者自定义函数来实现的。
innosetup 命令行参数
Inno Setup 是一个流行的 Windows 安装程序制作工具,它允许开发人员创建易于使用的安装程序。
通过使用命令行参数,开发人员可以进一步自定义安装过程和行为。
以下是一些常用的 Inno Setup 命令行参数:
1. /VERYSILENT: 使用此参数可以在安装过程中完全禁用任何用户界面,安装程序将在后台静默运行,用户无需进行任何交互操作。
2. /SUPPRESSMSGBOXES: 使用此参数可以禁用任何消息框的显示,安装过程中的任何错误或警告都将被忽略。
3. /DIR="path": 使用此参数可以指定安装目录,替代用户手动选择安装目录的过程。
4. /SILENT: 与 /VERYSILENT 类似,但在安装过程中允许一些基本的进度条显示。
5. /NORESTART: 使用此参数可以禁止安装完成后自动重新启动
计算机。
6. /LOG="filename": 使用此参数可以指定安装日志文件的路径和名称,以便在安装过程中记录详细的日志信息。
这些命令行参数可以帮助开发人员在不同的安装场景中自定义Inno Setup 安装程序的行为,使得安装过程更加灵活和自动化。
通过合理使用这些参数,开发人员可以根据具体的需求来定制安装程序,提高用户体验和工作效率。
inno setup setup 段条件语句-回复Inno Setup Setup 段条件语句在使用Inno Setup构建安装程序时,Setup段中的条件语句是非常重要的组成部分。
条件语句允许我们根据系统环境或用户选择来决定是否执行某些操作,比如安装特定的组件或创建快捷方式。
本文将逐步介绍如何使用Inno Setup的条件语句。
首先,让我们了解一下Inno Setup的Setup段的基本结构。
通常,在Inno Setup的安装脚本中,Setup段位于脚本的顶部,用于指定安装程序的一些基本信息和设置。
这是一个典型的Setup段的示例:[Setup]AppName=MyAppAppVersion=1.0DefaultDirName={pf}\MyAppOutputDir=Output在这个示例中,我们指定了应用程序的名称(AppName)为"MyApp",版本号(AppVersion)为1.0,应用程序的默认安装目录(DefaultDirName)为"{pf}\MyApp",输出目录(OutputDir)为"Output"。
接下来,我们将介绍如何在Setup段中使用条件语句。
条件语句用于在安装过程中基于某些条件来执行或跳过某些操作。
条件语句通常使用Pascal 脚本语言编写,并使用特定的函数和常量。
假设我们有一个应用程序需要根据操作系统的不同来安装不同的组件。
为了做到这一点,我们可以使用Inno Setup提供的条件函数“IsWinXPEdition”来判断当前操作系统是否为Windows XP。
以下是一个示例:[Setup]AppName=MyAppAppVersion=1.0DefaultDirName={pf}\MyAppOutputDir=Output[Components]Name: ComponentA; Description: "Component A"Name: ComponentB; Description: "Component B"; Check: ShouldInstallComponentB[Code]function ShouldInstallComponentB: Boolean;Result := not IsWinXPEdition;end;在这个示例中,我们在Components部分中定义了两个组件ComponentA和ComponentB,分别具有各自的描述。
bat⽂件⾃动编译InnoSetup脚本
今天想制作⼀个bat⽂件,打包多个innosetup脚本,参考链接:/joean/p/4870428.html
流程:
1. 新建⽂本⽂档,将.txt改为.bat;
2. 在⽂本中输⼊⼀下⽂本,其中Compil32是Innosetup的编译器⽂件;
compil32 /cc "x.iss"
compil32 /cc "y.iss"
compil32 /cc "z.iss"
3. 保存;
在这个过程中,点击bat⽂件,闪⼀下退出,在bat⽂档的末尾加⼊pause后在控制台输出中显⽰“compil32不是内部外部命令...”信息,查找百度发现是compil32的路径没有添加到系统变量中,导致bat⽂件执⾏时找不到compil32.
解决⽅法是:
1、在桌⾯找到“计算机”图标并点击⿏标右键,并在弹出菜单中选择“属性”;
2、点击左侧的“⾼级系统设置”;
3、在弹出的系统属性对话框中,点击“环境变量”按钮;
4、找到变量“Path”,并点击“编辑”按钮;
5、添加变量值为“C:\Program Files (x86)\Inno Setup 5\”,最后点击“确定”按钮结束设置;
点击bat,成功运⾏。
inno setup拷贝文件夹收藏、脚本范例分析:先来看看一段用INNO SETUP脚本向导创建的基本脚本的[Setup]段:[Setup]AppName=Premiere 6.5 汉化补丁-----------------(程序名称) AppVerName=Premiere 6.5 汉化补丁------------(程序名称+版本) AppPublisher=浩子工作室----------------------------(开发单位或作者)AppPublisherURL=------(开发单位或作者网址)AppSupportURL=-------(技术服务网址)AppUpdatesURL=-------(更新升级网址) DefaultDirName={pf}\Adobe\Premiere 6.5-----(默认安装路径,{pf}就是“Program files”文件夹)DefaultGroupName=Premiere 6.5 汉化补丁----(默认添加在开始菜单中的项目名称)AllowNoIcons=yes--------------------------------------(创建快捷方式图标)LicenseFile=D:\汉化\许可文件.txt------------------(显示许可协议)InfoBeforeFile=D:\汉化\汉化说明.txt-------------(显示软件说明) OutputDir=成品-----------------------------------------(安装程序存放位置)OutputBaseFilename=Premiere 6.5 汉化补丁--(安装程序名称)SetupIconFile=汉.ico----------------------------------(安装程序图标)Compression=lzma-------------------------------------(压缩器:Lzma)SolidCompression=yes--------------------------------(压缩方式:一次性压缩)括号里内容是笔者添加的注释,我想大家应该能够理解。
不过,作为汉化补丁,一般不需要创建开始菜单项目,不需要创建快捷方式图标,不需要卸载功能,而要求具有自动寻找原程序安装位置的功能,这样可使补丁安装更方便快捷, 因此作了如下修改:(1)去掉以下项目:DefaultGroupName=Premiere 6.5 汉化补丁----(默认添加在开始菜单中的项目名称)AllowNoIcons=yes--------------------------------(创建快捷方式图标)(2)增加以下项目:DisableDirPage=yes-------------------------------(不用指定安装路径)DisableProgramGroupPage=yes---------------(不要添加开始菜单项目)DirExistsWarning=no-----------------------------(不提示文件夹已存在) Uninstallable=no-----------------------------------(不要卸载程序) (3)修改以下项目:原来的:DefaultDirName={pf}\Adobe\Premiere 6.5----(默认安装路径,{pf}就是“Program files”文件夹)关键问题是,这个路径是死的,一旦你在安装Premiere 6.5时更改了安装路径,比如有些人喜欢把大程序安装到D盘,这么一来,原路径就无效了,结果您还得手动指定正确的路径。
这样的安装程序就显得太“笨”了。
那么,如何让补丁程序自动获得原程序的实际安装路径呢?回答是:利用注册表。
大多数应用程序安装后都会向注册表的特定位置写入安装和卸载信息,因此,只要让安装程序提取这些信息并转位自己的安装路径,就可实现自动定位功能。
Inno Setup早就支持这个功能了,现在,我们把Premiere 6.5的注册表信息告诉它就行了,请看修改后的:DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\Cur rentVersion\Uninstall\Adobe Premiere 6.5,InstallLocation}-------------(从注册表读取Premiere 6.5的实际安装路径) 接着来看看基本脚本的[Files]段, 前面讲过,这一段是用来定义要打包到安装程序里的文件的, 因此, 要搞清楚这几个名词:Source:-------------文件的存放位置(来源)DestDir:-------------文件要安装到什么地方(目标)Flags:----------------对文件的附加处理参数(标示)下面来看看具体内容:[Files]Source: "D:\汉化\Preminfo.dll"; DestDir: "{app}"; Flags: ignoreversionSource: "D:\汉化\主程序\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirsSource: "D:\汉化\插件\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs生词注释:{app}----------------这是个常量, 代表程序安装路径,只要你在[Setup]段中的DefaultDirName项中进行了设定,其他地方就可以用它来代替。
可能有人会问,常量是什么?通俗地说就是固定词汇,它们用简单的符号分别代表操作系统中的一些固定目录,使脚本简洁明了。
具体内容可参看Inno Setup的帮助文本里的相关说明。
Ignoreversion--------不理会文件的版本问题。
Recursesubdirs-------把主文件夹和子文件夹一块儿打包(一锅端)。
Createallsubdirs-----安装时创建相应的子文件夹。
对[Files]段的修改:很多汉化补丁都是直接用汉化过的文件去替换原文件,很少在原程序目录里创建新的文件夹,因此可以去掉Flags 标示中的Createallsubdirs 项。
在安装的时候执行某个可执行文件...[Files] Source: "你要执行的文件名"; DestDir: "{app}"; Flags: ignoreversion deleteafterinstall .....[Run] Filename: "{app}\你要执行的文件名"; Description: "Setup"; Flags: skipifsilent shellexec附:Inno Setup的安装脚本包含的主要段落:[Setup] 段:安装和卸载程序的全局设置,如作者信息、安装目录、压缩方式、是否卸载等。
[Types] 段:定义安装组件的类型,如“完全安装”、“最小安装”、“选择安装”。
[Components] 段:定义可供选择安装的所有组件[Tasks] 段:定义安装期间所有由用户定制的任务。
[Dirs] 段:定义用户想额外创建的目录。
[Files] 段:定义要打包到安装程序里的文件。
[Icons] 段:定义要创建在开始菜单、桌面或任务栏等位置的快捷方式和图标。
[INI] 段:定义向用户系统中 .INI 文件中添加的新条目。
[InstallDelete] 段:定义要在安装之前删除的文件或文件夹。
[Languages] 段:定义安装程序中可使用的语言(适用于多国语言版)。
[Registry] 段:定义安装过程中要读取、新建或删除的注册表项。
[Run] 段:定义要在安装结束时运行的程序。
[UninstallDelete] 段:定义要在卸载时删除的其他文件或文件夹。
[UninstallRun] 段:定义要在开始卸载前运行的程序本文来自CSDN博客,转载请标明出处:Inno Setup的常用脚本InnoSetup 2010-01-08 09:08:00 阅读104 评论0 字号:大中小订阅安装不同的目录:[Files]Source: "我的程序\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirsSource: "我的程序\*"; DestDir: {cf}\我的程序; Flags: ignoreversion recursesubdirs createallsubdirs开始菜单快捷方式:[Icons]Name: "{group}\我的程序名称"; Filename: "{app}\我的程序.exe" ;WorkingDir: "{app}"桌面快捷方式:[Icons]Name: "{userdesktop}\我的程序名称"; Filename: "{app}\我的程序.exe"; WorkingDir: "{app}"开始菜单卸载快捷方式:[Icons]Name: "{group}\{cm:UninstallProgram,我的程序}"; Filename: "{uninstallexe}"安装完后选择运行:[Run]Filename: "{app}\我的程序.exe"; Description: "{cm:LaunchProgram,我的程序名称}"; Flags: nowait postinstall skipifsilent安装完后自动运行:[Run]Filename: "{app}\我的程序.exe";在界面左下角加文字:[Messages]BeveledLabel=你的网站名称选择组件安装:(组件1的Flags: fixed为必须安装)[Types]Name: "full"; Description: "选择安装"; Flags: iscustom[Components]Name: 组件1文件夹; Description: 组件1名称; Types: full; Flags: fixedName: 组件2文件夹; Description: 组件2名称; Types: fullName: 组件3文件夹; Description: 组件3名称; Types: full[Files]Source: "E:\组件1文件夹\我的程序.exe"; DestDir: "{app}"; Flags: ignoreversionSource: "E:\组件1文件夹\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: 组件1文件夹Source: "E:\组件2文件夹\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: 组件2文件夹Source: "E:\组件3文件夹\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: 组件3文件夹添加关于按钮:[Code]{注意:关于按钮单击后执行的过程,一定要写在InitializeWizard()过程之前}procedure ButtonAboutOnClick(Sender: TObject);beginMsgBox('关于对话框。