[Registry]
Root: HKLMSubkey: SOFTWARE\Microsoft\橡铅Windows\CurrentVersion\RunValueType: stringValueName: 开机启动ValueData: """C:\Program Files\Thunder\Thunder.exe"" /s"Flags: uninsdeletevalue
1 、如何让协议许可页面默认选中我同意按钮
[code]
procedure InitializeWizard()
begin
WizardForm.LICENSEACCEPTEDRADIO.Checked := true
end
2、自定义安装程序右上角图片大小
[code]
procedure InitializeWizard()
begin
WizardForm.WizardSmallBitmapImage.width:=150//设置页眉图片的大小
WizardForm.WizardSmallBitmapImage.left:=WizardForm.width-150//设置左边页眉留出的空隙
WizardForm.PAGENAMELABEL.width:=0//设置标题文字显示的大小
WizardForm.PAGEDESCRIPTIONLABEL.width:=0//设置标题文字显示的大小
end
或者
//自定义安装向导小图片
[code]
procedure InitializeWizard()
begin
Wizardform.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()
begin
WizardForm.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()
begin
Wizardform.WELCOMELABEL1.left:= 18//自定义欢迎页面标题1显示氏祥位置
Wizardform.WELCOMELABEL2.left:= 18//自定义欢迎页面标题2显示位置
Wizardform.WizardBitmapImage.left:= WizardForm.width-164 //自定义安装向导图片显示位置(显示大小,此处为居右显示)
end
5、显示出组件选择框
[Types]
Name: fullDescription: 推荐
Name: defaultDescription: 典型
Name: customDescription: 自定义Flags: iscustom
告诉安装程序这个类型是自定义类型。必须定义iscustom这个参数,才能显示出组件选择框
6、定义[Messages]的颜色
[code]
procedure InitializeWizard()
begin
WizardForm.BeveledLabel.Enabled:= True
WizardForm.BeveledLabel.Font.Color:= clblue
end
7、不显示一些特定的安装界面
[code]
function ShouldSkipPage(PageID: Integer): Boolean
begin
if PageID=wpReady then
result := true
end
wpReady 是准备安装界面
PageID查询 INNO帮助中的 Pascal 脚本: 事件函数常量
预定义向导页 CurPageID 值
wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished
8、换行符号
在 [Messages] 换行符号为%n
在 MsgBox 中换行符号为 #13#10//#13 为回车字符
9、颜色代码
(1)一个值形如 $bbggrr, 这里的 rr, gg 和 bb 指定了两位的亮度值(以十六进制表示)分别为红色,绿色和蓝色。
(2)预定义的颜色名称:
clBlack(黑色),clMaroon(暗红),clGreen(绿色),clOlive(橄榄绿),
clNavy(深蓝),clPurple(紫色),clTeal(深青),clGray(灰色),
clSilver(浅灰),clRed(红色),clLime(浅绿),clYellow(黄色),
clBlue(蓝色),clFuchsia(紫红),clAqua(青绿),clWhite(白色)。
10、inno代码注释符号
实例 —— 分号
// 实例 —— // 双斜杠 多用在code段
{ }实例 —— {大括号多用在code段}
注释符号均在英文输入法状态下输入
11、在运行卸载程序前显示d出式消息
[code]
function InitializeUninstall(): Boolean
begin
if MsgBox('', mbConfirmation, MB_YESNO) = IDYES then
result:=true
else
result:=false
end
12、安装、卸载时判断是否程序正在运行,卸载完成时自动打开网页
[code]
var
ErrorCode: Integer
IsRunning: Integer
// 安装时判断客户端是否正在运行
function InitializeSetup(): Boolean
begin
Result :=true //安装程序继续
IsRunning:=FindWindowByWindowName('东方宽频网络电视')
while IsRunning<>0 do
begin
if Msgbox('安装程序检测到客户端正在运行。' #13#13 '您必须先关闭它然后单击“是”继续安装,或按“否”退出!', mbConfirmation, MB_YESNO) = idNO then
begin
Result :=false//安装程序退出
IsRunning :=0
end else begin
Result :=true //安装程序继续
IsRunning:=FindWindowByWindowName('东方宽频网络电视')
end
end
end
// 卸载时判断客户端是否正在运行
function InitializeUninstall(): Boolean
begin
Result :=true //安装程序继续
IsRunning:=FindWindowByWindowName('东方宽频网络电视')
while IsRunning<>0 do
begin
if Msgbox('安装程序检测到客户端正在运行。' #13#13 '您必须先关闭它然后单击“是”继续安装,或按“否”退出!', mbConfirmation, MB_YESNO) = idNO then
begin
Result :=false//安装程序退出
IsRunning :=0
end else begin
Result :=true //安装程序继续
IsRunning:=FindWindowByWindowName('东方宽频网络电视')
end
end
end
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep)
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
13、 删除文件和删除文件夹
//删除文件用 DeleteFile 只能删除一个文件,不能使用通配符来删除多个文件
DeleteFile(ExpandConstant('{app}\abc.exe'))
//删除所有文件及文件夹
DelTree(ExpandConstant('{app}'), True, True, False)
14、BorderStyle
TFormBorderStyle = (bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin)
无边界式(bsNone) ,单边固定式(bsSingle),双边可变式(bsSizeable),对话框式(bsDialog)
15、if else
function NextButtonClick(CurPageID: Integer): Boolean
var
ResultCode: Integer
begin
Result := True
if (CurPageID = wpSelectDir) then
begin
MsgBox('AAAA', mbInformation, MB_OK)
end
else
begin
MsgBox('BBBB', mbInformation, MB_OK)
end
end
16、安装结束界面增加“设为首页”选项
[Tasks]
Name: changestartpageDescription: "设置vistaqq为默认主页"
[Registry]
Root: HKCUSubkey: "Software\Microsoft\Internet Explorer\Main"ValueType: stringValueName: "Start Page"ValueData: "http://www.vistaqq.com"tasks: changestartpage
17、添加“关于”和网站链接按钮
[Code]
procedure URLLabelOnClick(Sender: TObject)
var
ErrorCode: Integer
begin
ShellExec('open', 'http://www.vistaqq.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end
procedure AboutButtonOnClick(Sender: TObject)
begin
MsgBox(#13 'Vista 状态条风格盘符' #13 #13'本软件由jinn制作,希望各位登陆中天VIP工作室!' #13#13 '版权所有 (C) 中天VIP工作室', mbInformation, MB_OK)
end
var
AboutButton, CancelButton: TButton
URLLabel: TNewStaticText
procedure InitializeWizard()
begin
{ Create the pages }
WizardForm.PAGENAMELABEL.Font.Color:= clred
WizardForm.PAGEDESCRIPTIONLABEL.Font.Color:= clBlue
WizardForm.WELCOMELABEL1.Font.Color:= clGreen
WizardForm.WELCOMELABEL2.Font.Color:= clblack
CancelButton := WizardForm.CancelButton
AboutButton := TButton.Create(WizardForm)
AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width
AboutButton.Top := CancelButton.Top
AboutButton.Width := CancelButton.Width
AboutButton.Height := CancelButton.Height
AboutButton.Caption := '&About'
AboutButton.OnClick := @AboutButtonOnClick
AboutButton.Parent := WizardForm
URLLabel := TNewStaticText.Create(WizardForm)
URLLabel.Caption := '中天VIP工作室'
URLLabel.Cursor := crHand
URLLabel.OnClick := @URLLabelOnClick
URLLabel.Parent := WizardForm
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline]
URLLabel.Font.Color := clBlue
URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2
URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20)
end
18、去掉安装程序左上角“关于安装程序”的代码
procedure InitializeWizard()
begin
WizardForm.BorderIcons:= [biMinimize]
end
procedure CurPageChanged(CurPage: Integer)
begin
if CurPage=wpWelcome then
WizardForm.BorderIcons:= [biSystemMenu, biMinimize]
end
或者
procedure InitializeWizard()
begin
WizardForm.BORDERICONS := [biHelp, biSystemMenu, biMinimize]
end
19、自定义BeveledLabel文字
[Messages]
BeveledLabel=中天VIP工作室
20、自定义安装程序界面左上角“安装”文字
[message]
SetupAppTitle=需要的字
SetupWindowTitle=需要的字
21、自定义安装程序版本号
VersionInfoVersion=1.1
VersionInfoTextVersion=1.1
软件安装打包工具----Inno Setup 使用说明特殊用途的标识
有几个 [Messages] 段的项实际上不是用于在屏幕上显示的,它们是用于在安装程序中指定所使用的字体和字型号的。这些可选项中的每一个都有一个前导下划线字符
(“_”) 开始,请参阅 Default.isl 文件头部的注释的使用方法示例。
[Registry] 段
这个段是可选的,他定义了一些注册表项,用于在复制完文件之后创建在用户的系统中。
下面是 [Registry] 段的一个示例。
[Registry]
Root: HKCUSubkey: "Software\My Company"Flags: uninsdeletekeyifempty
Root: HKCUSubkey: "Software\My Company\My Program"Flags: uninsdeletekey
Root: HKLMSubkey: "Software\My Company"Flags: uninsdeletekeyifempty
Root: HKLMSubkey: "Software\My Company\My Program"Flags: uninsdeletekey
Root: HKLMSubkey: "Software\My Company\My Program"ValueType: string
ValueName: "InstallPath"ValueData: "{app}"
下面列出了支持的参数:
Root (必需的)
说明:
根键,知野必须是下列各项之一:
HKCR (HKEY_CLASSES_ROOT)
HKCU (HKEY_CURRENT_USER)
HKLM (HKEY_LOCAL_MACHINE)
HKU (HKEY_USERS)
HKCC (HKEY_CURRENT_CONFIG)
示例:
Root: HKCU
Subkey (必需的)
说明:
子键名称,可以包括常量。
示例:
Subkey: "Software\My Company\My Program"
ValueType
说明:
键值的数据类型,必须是下列各项之一:
none
string
expandsz
multisz
dword
binary
如果指定了 none (默认设置),安装程序将搭岩喊创建一个没有键值的键,在这种情况下将忽略 ValueName 和 ValueData 参数。
如果指定了 string,安装程序将创建一个字符串 (REG_SZ) 值。
如果指定了 expandsz,安装程序将创建一个扩展字符串 (REG_EXPAND_SZ) 值。这种数据类型主要用在 Windows NT 上,但是也支持
Windows 95/98.
如果指定了 multisz,安装程序将创建一个多行文本 (REG_MULTI_SZ) 值。
如果指定了 dword,安装程序将创建一个整数 (REG_DWORD) 值。
如果指定了 binary,安装程序将创建一个二进制 (REG_BINARY) 值。
示例:
ValueType: string
ValueName
说明:
要创建的键值的名称,可以包含常量。如果它是空的,将会写入“默认”(Default)值中。如果ValueType 参数被设置为 none, 该参数将被忽略。
示例:
ValueName: "Version"
ValueData
说明:
键值的数据。如果 ValueType 参数是 string, expandsz 或 multisz, 该参数是一个可以包含常量的字符串。如果数据类型是
dword, 该参数可以是一个十进制整数(例如“枣袭123”)或者是一个十六进制整数(例如“$7B”)。如果数据类型是 binary,
这是一个十六进制字节序列的形式:“00 ff 12 34”。如果数据类型是 none, 该参数被忽略。
对于一个 string, expandsz 或者 multisz 类型的键值,在这个参数中你可以使用一个特殊的叫做 {olddata}
的常量。{olddata} 常量代表的是注册表键值原来的数据。如果你想要添加一个字符串到一个已经存在的键值时 {olddata}
常量时很有用的,例如,{olddata}{app}.如果该键值并不存在或者不是一个字符串类型,这时 {olddata}
常量会被默默地删除。如果正要被创建的键值是 multisz 类型,但是已经存在的键值并不是多行文本 (例如它是 REG_SZ 或 REG_EXPAND_SZ
)类型,这时 {olddata} 常量也会被默默地删除,反之亦然。
对于一个 multisz 类型的键值,在这个参数中你可以使用一个特殊的叫做 {break} 的常量来嵌入换行(nulls)。
示例:
ValueData: "1.0"
Flags
说明:
“标记”,这个参数是一个附加的选项集合,可以多个选项共同使用,使用空格分开多个选项。下面列出了被支持的选项:
createvalueifdoesntexist
当指定了此标记时,只有当相同名称的键值不存在时安装程序才会创建该键值。如果数据类型是 none ,或者同时指定了 deletevalue 标记将忽略该标记。
deletekey
当指定了此标记时,如果该项已存在,安装程序会首先尝试去删除它,包括其中的键值和子键,然后如果 ValueType 不是 none 的话它将创建一个新的键和键值。
deletevalue
当指定了此标记时,如果该键值已存在,安装程序会首先尝试删除该键值。然后如果 ValueType 不是 none ,并且该键不存在时它将创建该键和新的键值。
dontcreatekey
当指定了此标记时,如果该键不存在于用户的系统中安装程序将不会试图创建该键或任何键值。如果改建不存在将不显示错误消息。
典型地该标记同 uninsdeletekey 标记结合使用,以便在安装时没有创建该键时确保在卸载期间删除该键。
noerror
如果安装程序在创建键或键值时无论什么原因失败不显示错误消息。
preservestringtype
该标记只用于 ValueType 参数为 string 或 expandsz 时。当指定了此标记并且该键值不存在或者已存在的键值不是字符串类型 (REG_SZ
或 REG_EXPAND_SZ) 时,该项将由 ValueType
指定的类型创建,如果该键值存在并且是一个字符串类型,该项将由与预先存在的键值相同的键值类型替代。
uninsclearvalue
当程序被卸载时,将设置该键值的数据为空的字符串 (类型 REG_SZ). 该标记不能同 uninsdeletekey 标记一起使用。
uninsdeletekey
当程序被卸载时,删除整个键,包括其下全部的键值和子键。对于由 Windows
自身使用的键来说使用该标记明显不是一个好的主意,你应当将该标记应用到你自己的应用程序键中。
uninsdeletekeyifempty
当程序被卸载时,如果该键下没有其它键值和子键则将其删除。该标记可以结合 uninsdeletevalue 标记一起使用。
uninsdeletevalue
当程序卸载时删除该键值,该标记可以结合 uninsdeletekeyifempty 标记一起使用。
注意:对于 Inno Setup 1.1 之前的版本,你可以与 none 数据类型一起使用该标记则将会成为 “delete key if empty”
(如为空则删除该键)功能的标记。这个技巧现在已经不在被支持,你必须使用 uninsdeletekeyifempty 标记来实现该功能。
示例:
Flags: uninsdeletevalue
公共参数
[Run] &[UninstallRun] 段
[Run] 段是可选的,指定任意数量的程序在成功安装程序以后及显示结束对话框之前被执行。同样 [UninstallRun]
段也是可选的,指定任意数量的程序在“卸载程序”的第一步时被执行。除非下面有其它说明,两个段共有相同的语法。
每个程序按照你的脚本编排的顺序被执行,当出路 [Run]/[UninstallRun] 的项时,安装程序将会等到当前的程序终止之后才处理下一个,当然除非使用了
nowait 标记。
这是一个 [Run] 段的示例。
[Run]
Filename: "{app}\INIT.EXE"Parameters: "/x"
下面列出了支持的参数:
Filename (必需的)
说明:
要被执行的程序,或要被打开的文件/文件夹。如果 Filename 不是一个 .exe 或 .com 文件,你必须在该项中使用 shellexec
标记。该参数可以包含常量。
示例:
Filename: "{app}\INIT.EXE"
Parameters
说明:
程序可选的命令行参数,该参数可以包含常量。
示例:
Parameters: "/x"
WorkingDir
说明:
程序起始位置的目录。如果没有指定该参数或该参数是空的,将不会改变任何特殊的目录。该参数可以包含常量。
示例:
WorkingDir: "{app}"
RunOnceId
说明:
只在 [UninstallRun] 段里面有效。如果相同的应用程序被安装超过了一次,“run”项将会重复出现在卸载记录文件里面。通过将一个字符串赋值给
RunOnceId, 你可以确保一个独特的 [UninstallRun] 项在卸载期间只被执行一次。例如,如果在卸载记录中的“run”中有两个或者更多的带有
RunOnceId 参数并被设置为“DelService”的项,则只有最后一个带有一个 RunOnceId
参数并被设置为“DelService”的项会被执行。其余的将被忽略。注意 RunOnceId 参数是大小写敏感的。
示例:
RunOnceId: "DelService"
Flags
说明:
“标记”,这个参数是一个附加的选项集合,可以多个选项共同使用,使用空格分开多个选项。下面列出了被支持的选项:
nowait
如果指定了该标记,将不会等待该项处理被结束运行之前就进行到下一个 [Run] 项,或者结束安装程序。不能结合 waituntilidle
标记一起使用。
shellexec
如果 Filename 不是一个可以直接执行的文件(一个 .exe 或 .com 文件)则该标记是必需的。当设置了该标记时,Filename
可以是一个文件夹或者任何已注册的文件类型 ―― 包括 .hlp, .doc
等等。文件将会被用户系统中的与该文件类型相关联的应用程序打开,就像用户在资源管理器中用鼠标双击该文件一样。
当在 Filename
中使用一个文件夹名称时,建议在后面加上一个反斜杠字符(例如“{group}\”),以确保可能有相同名称的程序不会被执行。同样要注意文件夹只能在 Windows
95/NT 4+ 上被打开,因为从那时起使用了一个新的资源管理器的外壳。
使用 shellexec 标记有一个缺点,那就是无法等待该过程结束,因此,它始终就像被指定了 nowait 标记一样 *** 作。
skipifdoesntexist
如果指定了该标记,如果 Filename 不存在安装程序将不会显示错误消息。它只适用于 [Run] 段,因为卸载程序从来不显示错误消息在
[UninstallRun] 项执行失败时。
runmaximized
如果指定了该标记,将会在一个最大化的窗口启动程序或文档。
runminimized
如果指定了该标记,将会在一个最小化的窗口启动程序或文档。
waituntilidle
如果指定了该标记,它将暂停直到该过程正在等待用户的输入并且没有未决的输入时,取而代之的是等待该过程的结束。(该标记调用 WaitForInputIdle
Win32 函数.) 不能结核 nowait 一起使用。
示例:
Flags: nowait
公共参数
[UninstallDelete] 段
该段是可选的。该段是用来定义一些附加的除了那些被安装的应用程序之外的要被卸载程序删除的文件或目录。使用该段来删除由你的应用程序创建的 .INI
文件是一个常用的办法。卸载程序在卸载过程的最后一步处理这些项。
这是一个 [UninstallDelete] 段的示例:
[UninstallDelete]
Type: filesName: "{win}\MYPROG.INI"
下面列出了支持的参数:
Type (必需的)
说明:
指出要被卸载程序删除的是什么。必须是下列之一:
files
Name 参数指定的是一个具体的文件的名称,或者是一个带有通配符的文件名。
filesandordirs
功能上类似于 files ,但是它还可以匹配目录名称,并且任何名称匹配的目录包括其中所有的文件和子目录都会被删除。
dirifempty
当使用它时,Name 参数必须是一个目录的名称,但是它不能包括通配符。只有在不包含任何文件和子目录的情况下该目录才能被删除。
示例:
Type: files
Name (必需的)
说明:
要被删除的文件或目录的名称。
注意:不要试图通过在这里使用通配符去删除 {app}
目录下的全部文件,我强烈建议你不要这样做的原因由两个,首先,用户通常不会意识到可能还有他们放进应用程序目录中的数据文件将要被删除而不会得到警告(例如他们可能卸载应用程序只是为了要将它转移到一个不同的驱动器)。最好是将其保留一直到最后用户想要删除时用手工的方法删除;还有,如果由于用户的失误碰巧将程序安装到了一个错误的目录当中(例如
C:\WINDOWS)而这时去卸载它势必结果会损失惨重。再次声明,千万不要这么做!
示例:
Name: "{win}\MYPROG.INI"
公共参数
编译器相关
[Setup]: Bits
有效值: 32
说明:
1.3 版本以后已废弃。 1.3 以前的版本的 Inno Setup 有一个 16 位的版本,编译器将检查 Bits
关键字以判断是否使用了正确的编译器来编译脚本。以后 Inno Setup 的更新的版本只有 32 位的版本可用,你将不再需要设置该关键字。无论什么时候如果
Bits 被设置为“16”,编译器都将会失败并提示一个错误消息。
[Setup]: UseSetupLdr
有效值: yes 或 no
默认值: yes
说明:
告诉安装程序编译器要创建的安装程序的类型,如果是 yes, 将把所有的安装程序数据编译成一个单独的 SETUP.EXE
(如果你愿意也可以重新命名为任何名称)。如果是 no, 将把安装程序数据编译成至少三个文件:SETUP.EXE, SETUP.0 和 SETUP.1. 你想使用
no 的仅有的理由大概是为了调试的目的。
注意:不要在一个使用了多磁盘生成(DiskSpanning=yes)的安装程序中使用 UseSetupLdr=no,当 UseSetupLdr 是 yes
时,安装程序被复制到用户的临时 (TEMP) 目录并在那里运行,这不会发生在 UseSetupLdr 是 no 的情况下,如果 Windows
试图去在磁盘上寻找 setup.exe 文件却不能找到,因为在驱动器中的是一个不同的磁盘,所以会产生错误的结果。
[Setup]: BackColor, BackColor2
有效值: 一个值形如 $bbggrr, 这里的 rr, gg 和 bb
指定了两位的亮度值(以十六进制表示)分别为红色,绿色和蓝色。或者也可以是下列预定义的颜色名称之一:clBlack(黑色),clMaroon(暗红),clGreen(绿色),clOlive(橄榄绿),clNavy(深蓝),clPurple(紫色),clTeal(深青),clGray(灰色),clSilver(浅灰),clRed(红色),clLime(浅绿),clYellow(黄色),clBlue(蓝色),clFuchsia(紫红),clAqua(青绿),clWhite(白色)。
默认值: BackColor 为 clBlue,
BackColor2 为 clBlack
说明:
BackColor 关键字自定的颜色被用在安装程序窗口背景渐变色的上面(或左面,如果
BackColorDirection=lefttoright),BackColor2 指定的颜色被用在下面(或右面)。
如果 BackSolid=yes 则 BackColor2 的设置被忽略。
示例:
BackColor=clBlue
BackColor2=clBlack
BackColor=$FF0000
BackColor2=$000000
[Setup]: BackColorDirection
有效值: toptobottom 或 lefttoright
默认值: toptobottom
说明:
决定了安装程序窗口的背景渐变色的渐变方向,如果 BackColorDirection 是 toptobottom, 将自上而下绘出,如果是
lefttoright, 将从左到右绘出。
[Setup]: BackSolid
有效值: yes 或 no
默认值: no
说明:
它决定了安装程序窗口的背景色是使用单一颜色还是渐变色,如果是 yes, 背景色会是一单一颜色(颜色由 BackColor 指定,忽略 BackColor2)。
[Setup]: AppName
说明:
这个必需的关键字指定了你正在安装的应用程序的标题。不要包含版本号,那样应该使用 AppVerName 关键字。AppName
在安装程序的全部过程始终被显示,位于安装程序屏幕的左上角和向导中。
示例: AppName=My Program
[Setup]: AppVerName
说明:
这个必需的关键字的值应该和 AppName 的值相同(或相似),但是它还应当包含程序的版本号。
示例: AppVerName=My Program version 3.0
[Setup]: AppId
默认值: 如果没有指定 AppId 或者它是空值,编译器将会把 AppName 的值作为 AppId 来使用。
说明:
AppId 的值是被存储在卸载记录文件 (unins???.dat)
里面的,以便随后的安装程序检查后决定是否可以被添加到一个特定的已存在的卸载记录,安装程序只有在已存在的卸载记录中的 AppId 和当前的安装程序的 AppId
相同是才能添加到卸载记录。举一个实际的例子,比方说你右两个安装程序,一个叫做《我的程序》而另外一个叫做《我的程序 1.1 升级版》,要想把《我的程序 1.1
升级版》添加到《我的程序》的卸载记录中,你应该设置两个安装程序的 AppId 为相同的值。
AppId 还决定了卸载注册表键的实际名称,被 Inno Setup 在其末尾附加上“_is1”(因此,如果 AppId 是
“MyProgram”,那么这个键将会被命名为“MyProgram_is1”)。Inno Setup 的早于 1.3 的版本的键的名称是基于
AppVerName 的值的。
无论什么时候 AppId 都不会被显示出来,因此你要求非常隐讳的感觉很轻松。
示例: AppId=MyProgram
[Setup]: AppMutex
说明:
如果用户要为当前的应用程序升级为新的版本,然而当前的应用程序正在运行,该关键字就是用来防止这类事情的发生的,而且它也可以防止用户卸载正在运行的应用程序。它指定了一个或多个同名互斥体的名称(多个互斥体用逗号隔开),安装程序和卸载程序将会在启动时检查,如果存在,安装程序/卸载程序将显示如下的信息:“[安装程序或卸载程序]
检测到 [应用程序] 现在正在运行。请立即关闭它的全部实例,然后单机‘确定’继续,或者‘取消’退出。”
如果你要使用这个关键字就必须在你的应用程序中以该关键字指定的名称添加一个同名的互斥体。例如在 Delphi 和 C
中创建如下显示的同名互斥体,该代码应该在应用程序启动是被执行。
Delphi:
CreateMutex(nil, False, 'MyProgramsMutexName')
C:
CreateMutex(NULL, FALSE, "MyProgramsMutexName")
并不是必需在应用程序被结束之前显示的销毁同名互斥体对象,系统会自动完成此功能,也不推荐你这样做,因为理想状态下同名互斥体对象必须存在直到进程被完全终止。
注意在 Windows 下同名互斥体是大小写敏感的。
要想获得有关同名互斥体的更多信息请参阅 MS SDK 帮助的 CreateMutex 主题。
示例: AppMutex=MyProgramsMutexName
[Setup]: AppCopyright
说明:
可选的,它只是用来在安装程序屏幕的右下角显示一个版权消息。
示例: AppCopyright=Copyright ? 1997 My Company, Inc.
[Setup]: AppPublisher, AppPublisherURL, AppSupportURL, AppUpdatesURL, AppVersion
说明:
所有这些关键字都是用来在 Windows 2000 的控制面板“添加/删除程序”的“支持”对话框中显示一些信息。这些设置是可选的,并且在早期的 Windows
版本中是没有作用的。
示例:
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.mycompany.com/
AppVersion=1.5
[Setup]: DefaultDirName
说明:
这是个必需的关键字,该值是默认的目录名称,用于“选择目录页”向导。通常它有一个目录常量前缀。
如果 UsePreviousAppDir 是 yes (默认值)并且安装程序发现已经安装了一个相同应用程序的早期版本,它将用先前选择的目录代替默认的目录名称。
示例:
如果你使用:
DefaultDirName={sd}\MYPROG
在 Setup 中,典型地应有如下显示:
C:\MYPROG
如果你使用:
DefaultDirName={pf}\My Program
在 Setup 中,典型地应有如下显示:
C:\Program Files\My Program
[Setup]: Uninstallable
有效值: yes 或 no
默认值: yes
说明:
它决定了 Inno Setup 的自动卸载程序是否被包含在安装程序中。如果是 yes 将包含卸载程序,如果是 no
将不会包括可卸载支持,最终用户只能用手工的方法删除属于你的应用程序的文件。
[Setup]: MinVersion
格式: a.bb,c.dd, 这里的 a.bb 是表示 Windows 的版本,c.dd 是表示 Windows NT 的版本。
默认值: 4,4
说明:
该关键字让你指定运行你的软件所需要的最低的 Windows 或 Windows NT 的版本,默认值是“4,4”,实际上它也可以被设置为“4,3.51”来支持
NT 3.51 . 要防止你的程序被运行在 Windows 或 Windows NT 上,指定“0”为其中之一的最低版本。版本创建编号(Build
numbers)和(或)服务包级别(Service pack levels)可以被包括在版本号中。
如果用户的系统不适合所要求的最低版本,安装程序将给出一个错误消息然后退出。
[Setup]: OnlyBelowVersion
格式: a.bb,c.dd, 这里的 a.bb 是表示 Windows 的版本,c.dd 是表示 Windows NT 的版本。
默认: 0,0
说明:
该关键字让你指定不能运行你的软件的最低的 Windows 或 Windows NT 的版本(亦即高于此版本则无法运行)。指定 0
为其中之一的版本的意思是没有版本上限。版本创建编号(Build numbers)和(或)服务包级别(service pack
levels)可以被包括在版本号中。
该关键字实际上是和 MinVersion 恰好相反。
[Setup]: AdminPrivilegesRequired
有效值: yes 或 no
默认值: no
说明:
如果设置为 yes, 而且用户没有管理员的权限,那么安装程序在启动的时候将给出一个错误消息(“安装这个程序时你必须以管理员的身份登录。”)。它只适用于
Windows NT/2000.
具体的把你邮箱留下 我发给你!
一 安装1. 下载
在LIBSVM的主页上下载最新版本的软件包,并解压到合适目录中。
2. 编译
如果你使用的是64位的 *** 作的系统和Matlab,那么不需要进行编译步骤,因为自带软件包中已经包含有64位编译好的版本:libsvmread.mexw64、libsvmwrite.mexw64、svmtrain.mexw64、svmpredict.mexw64。否则,需要自己编译二进制文件。
首先在Mtlab中进入LIBSVM根目录下的matlab目录(如C:\libsvm-3.17\matlab),在命令窗口输入
>>mex –setup
然后Matlab会提示你选择编译mex文件的C/C++编译器,就选择一个已安装的编译器,如Microsoft Visual C++ 2010。之后Matlab会提示确认选择的编译器,输入y进行确认。
然后可以输入以下命令进行编译。
>>make
注意,Matlab或VC版本过低可能会导致编译失败,建议使用最新的版本。
编译成功后,当前目录下会出现若干个后缀为mexw64(64位系统)或mexw32(32位系统)的文件。
3. 重命名(可选,但建议执行)
编译完成后,在当前目录下回出现svmtrain.mexw64、svmpredict.mexw64(64位系统)或者svmtrain.mexw32、svmpredict.mexw32(32位系统)这两个文件,把文件名svmtrain和svmpredict相应改成libsvmtrain和libsvmpredict。
这是因为Matlab中自带有SVM的工具箱,而且其函数名字就是svmtrain和svmpredict,和LIBSVM默认的名字一样,在实际使用的时候有时会产生一定的问题,比如想调用LIBSVM的变成了调用Matlab SVM。
如果有进行重命名的,以后使用LIBSVM时一律使用libsvmtrain和libsvmpredict这两个名字进行调用。
4. 添加路径
为了以后使用的方运段便,建议把LIBSVM的编译好的文件所在路径(如C:\libsvm-3.17\matlab)添加到Matlab的搜索路径中。具体 *** 作为:(中文版Matlab对应进行)
HOME ->Set Path ->Add Folder ->加入编译好的文件所在的路径(如C:\libsvm-3.17\matlab)
当亏弊然也可以把那4个编译好的文件复制到想要的地方,然后再把该路径添加到Matlab的搜索路径中。
二 测试
LIBSVM软件包中自带有测试数据,为软件包根目录下的heart_scale文件,可以用来测试LIBSVM是否安装成功。这里的heart_scale文件不能用Matlab的load进行读取,需要使用libsvmread读取。
进入LIBSVM的根目录运行以下代码(因为heart_scale文件没有被添加进搜索路径中,其他路径下无法访问这个文件):
[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale')
model = libsvmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07')
[predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model)
如果LIBSVM安装正确的话,会出现以下的运行结果,显示正确率为86.6667%。
*
optimization finished, #iter = 134
nu = 0.433785
obj = -101.855060, rho = 0.426412
nSV = 130, nBSV = 107
Total nSV = 130
Accuracy = 86.6667% (234/270) (classification)
三 原理简介
使用SVM前首先得了解SVM的工作原理,简单介绍如下。
SVM(Support Vector Machine,支持向量机)是一种有监督的机器学习方法,可以学习不同类别的已知样本的特点,进而对未知的样本进行预测。
SVM本质上是一个二分类的算法,对于n维空间的输入样本销悄族,它寻找一个最优的分类超平面,使得两类样本在这个超平面下可以获得最好的分类效果。这个最优可以用两类样本中与这个超平面距离最近的点的距离来衡量,称为边缘距离,边缘距离越大,两类样本分得越开,SVM就是寻找最大边缘距离的超平面,这个可以通过求解一个以超平面参数为求解变量的优化问题获得解决。给定适当的约束条件,这是一个二次优化问题,可以通过用KKT条件求解对偶问题等方法进行求解。
对于不是线性可分的问题,就不能通过寻找最优分类超平面进行分类,SVM这时通过把n维空间的样本映射到更高维的空间中,使得在高维的空间上样本是线性可分的。在实际的算法中,SVM不需要真正地进行样本点的映射,因为算法中涉及到的高维空间的计算总是以内积的形式出现,而高维空间的内积可以通过在原本n维空间中求内积然后再进行一个变换得到,这里计算两个向量在隐式地映射到高维空间的内积的函数就叫做核函数。SVM根据问题性质和数据规模的不同可以选择不同的核函数。
虽然SVM本质上是二分类的分类器,但是可以扩展成多分类的分类器,常见的方法有一对多(one-versus-rest)和一对一(one-versus-one)。在一对多方法中,训练时依次把k类样本中的某个类别归为一类,其它剩下的归为另一类,使用二分类的SVM训练处一个二分类器,最后把得到的k个二分类器组成k分类器。对未知样本分类时,分别用这k个二分类器进行分类,将分类结果中出现最多的那个类别作为最终的分类结果。而一对一方法中,训练时对于任意两类样本都会训练一个二分类器,最终得到k*(k-1)/2个二分类器,共同组成k分类器。对未知样本分类时,使用所有的k*(k-1)/2个分类器进行分类,将出现最多的那个类别作为该样本最终的分类结果。
LIBSVM中的多分类就是根据一对一的方法实现的。
四 使用
关于LIBSVM在Matlab中的使用,可以参看软件包中matlab目录下的README文件,这里对里面内容做一个翻译和一些细节的讲解。
1. 训练
libsvm函数用于对训练集的数据进行训练,得到训练好的模型。
model = libsvmtrain(training_label_vector, training_instance_matrix [, 'libsvm_options'])
这个函数有三个参数,其中
-training_label_vector:训练样本的类标,如果有m个样本,就是m x 1的矩阵(类型必须为double)。这里可以是二分类和多分类,类标是(-1,1)、(1,2,3)或者其他任意用来表示不同的类别的数字,要转成double类型。
-training_instance_matrix:训练样本的特征,如果有m个样本,每个样本特征是n维,则为m x n的矩阵(类型必须为double)。
-libsvm_options:训练的参数,在第3点详细介绍。
2. 预测
libpredict函数用于对测试集的数据进行测试,还能对未知样本进行预测。
[predicted_label, accuracy, decision_values/prob_estimates]
= libsvmpredict(testing_label_vector, testing_instance_matrix, model [, 'libsvm_options'])
这个函数包括四个参数,其中
-testing_label_vector:测试样本的类标,如果有m个样本,就是m x 1的矩阵(类型必须为double)。如果类标未知,可以初始化为任意m x 1的double数组。
-testing_instance_matrix:测试样本的特征,如果有m个样本,每个样本特征是n维,则为m x n的矩阵(类型必须为double)。
-model:使用libsvmtrain返回的模型
-libsvm_options:预测的参数,与训练的参数形式一样。
3. 训练的参数
LIBSVM训练时可以选择的参数很多,包括:
-s svm类型:SVM设置类型(默认0)
0 — C-SVC; 1 –v-SVC; 2 – 一类SVM; 3 — e-SVR; 4 — v-SVR
-t 核函数类型:核函数设置类型(默认2)
0 – 线性核函数:u’v
1 – 多项式核函数:(r*u’v + coef0)^degree
2 – RBF(径向基)核函数:exp(-r|u-v|^2)
3 – sigmoid核函数:tanh(r*u’v + coef0)
-d degree:核函数中的degree设置(针对多项式核函数)(默认3)
-g r(gamma):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认1/k,k为总类别数)
-r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)
-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)
-p p:设置e -SVR 中损失函数p的值(默认0.1)
-m cachesize:设置cache内存大小,以MB为单位(默认40)
-e eps:设置允许的终止判据(默认0.001)
-h shrinking:是否使用启发式,0或1(默认1)
-wi weight:设置第几类的参数C为weight*C (C-SVC中的C) (默认1)
-v n: n-fold交互检验模式,n为fold的个数,必须大于等于2
以上这些参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。
4. 训练返回的内容
libsvmtrain函数返回训练好的SVM分类器模型,可以用来对未知的样本进行预测。这个模型是一个结构体,包含以下成员:
-Parameters: 一个5 x 1的矩阵,从上到下依次表示:
-s SVM类型(默认0);
-t 核函数类型(默认2)
-d 核函数中的degree设置(针对多项式核函数)(默认3);
-g 核函数中的r(gamma)函数设置(针对多项式/rbf/sigmoid核函数) (默认类别数目的倒数);
-r 核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
-nr_class: 表示数据集中有多少类别,比如二分类时这个值即为2。
-totalSV: 表示支持向量的总数。
-rho: 决策函数wx+b中的常数项的相反数(-b)。
-Label: 表示数据集中类别的标签,比如二分类常见的1和-1。
-ProbA: 使用-b参数时用于概率估计的数值,否则为空。
-ProbB: 使用-b参数时用于概率估计的数值,否则为空。
-nSV: 表示每类样本的支持向量的数目,和Label的类别标签对应。如Label=[1-1],nSV=[6367],则标签为1的样本有63个支持向量,标签为-1的有67个。
-sv_coef: 表示每个支持向量在决策函数中的系数。
-SVs: 表示所有的支持向量,如果特征是n维的,支持向量一共有m个,则为m x n的稀疏矩阵。
另外,如果在训练中使用了-v参数进行交叉验证时,返回的不是一个模型,而是交叉验证的分类的正确率或者回归的均方根误差。
5. 预测返回的内容
libsvmtrain函数有三个返回值,不需要的值在Matlab可以用~进行代替。
-predicted_label:第一个返回值,表示样本的预测类标号。
-accuracy:第二个返回值,一个3 x 1的数组,表示分类的正确率、回归的均方根误差、回归的平方相关系数。
-decision_values/prob_estimates:第三个返回值,一个矩阵包含决策的值或者概率估计。对于n个预测样本、k类的问题,如果指定“-b 1”参数,则n x k的矩阵,每一行表示这个样本分别属于每一个类别的概率;如果没有指定“-b 1”参数,则为n x k*(k-1)/2的矩阵,每一行表示k(k-1)/2个二分类SVM的预测结果。
6. 读取或保存
libsvmread函数可以读取以LIBSVM格式存储的数据文件。
[label_vector, instance_matrix] = libsvmread(‘data.txt’)
这个函数输入的是文件的名字,输出为样本的类标和对应的特征。
libsvmwrite函数可以把Matlab的矩阵存储称为LIBSVM格式的文件。
libsvmwrite(‘data.txt’, label_vector, instance_matrix]
这个函数有三个输入,分别为保存的文件名、样本的类标和对应的特征(必须为double类型的稀疏矩阵)。
五 更新:svdd扩展安装(2014.10)
从libsvm官网下载svdd工具箱,目前使用libsvm3.18以及svdd3.18版本。
svdd工具箱里面有一个matlab文件夹和3个文件svm.cpp、svm.h、svm-train.c。
将matlab文件夹中的文件svmtrain.c覆盖原libsvm的matlab文件夹中的文件。
将svm.cpp、svm.h、svm-train.c这3个文件覆盖libsvm文件夹下的相同文件。
按本文刚开始讲述的方法进行mex -setup、make等完成安装,根据需要进行改名以及添加Path。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)