今天研究了一天的inno setup,下面说说我的使用心得。inno setup的基础性的知识可以去网上搜,一大堆。
主要说一下我觉得特别需要注意的地方:
[Setup]
;(在编译器中点击菜单“工具 -> 产生 GUID”可以产生一个新的 GUID)
AppId={{33B09C83-AB05-47DE-BFC0-C13A85DA5743}
AppName=myprogram
AppVerName=myprogram
AppPublisher=你的公司名
AppPublisherURL=你的公司网站
AppSupportURL=你的公司网站
AppUpdatesURL=你的公司网站
DefaultDirName={pf}\myprogram <---------在安装向导中提示用户指定安装目录时的默认目录
;DefaultGroupName=myprogram <------在开始菜单的名字
OutputBaseFilename=myprogram <---------表示你的安装文件名为myprogram.exe(如果改成是setup,那么生成的文件名就是setup.exe
Compression=none
SolidCompression=no
AlwaysRestart=no
;不指定安装路径和不添加开始菜单项目
;DisableDirPage=yes
DisableProgramGroupPage=yes
VersionInfoVersion = 0.1.1
[Languages]
Name: "chinese"; MessagesFile: "compiler:Default.isl" <------指定安装时用的语言为简体中文
;[Tasks]
;因为它没有用户交互界面程序,直接是在命令窗口下运行的,所以这个驱动不能建立快捷方式,
;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files] <--source:代表你电脑中的驱动文件,经过编译之后都会集成在setup中。别人使用这个setup程序时就直接把这些文件放到他的电脑app目录下,app是他选择的目录
Source: "driver.inf";DestDir: "{app}";Flags: ignoreversion; Check: Isx86
Source: "driver.sys";DestDir: "{app}";Flags: ignoreversion; Check: Isx86
Source: "udriver.exe";DestDir: "{app}";Flags: ignoreversion;Check: Isx86
Source: "driver.ids";DestDir: "{app}";Flags: ignoreversion;Check: Isx86
Source: "devcon.exe";DestDir: "{app}";Flags: ignoreversion;Check: Isx86
Source: "CheckDriverExist.bat";DestDir: "{app}";Flags: ignoreversion;Check: Isx86 <---这个.bat是自己写的批处理文件,负责检测当前驱动是否已经安装,防止多次安装
[Run] <------下面这个是执行添加硬件的那个安装
Filename: "{app}\devcon.exe"; Parameters: "install US.inf ""root\usbipenum"""; WorkingDir: "{app}";Flags: runhidden; Check:IsSMIUSBoverIPExist
[code]
var
ErrorCode: Integer;
ResultString: String;
function Isx86:Boolean;
begin
Result:=not IsWIn64;
end;
function IsSMIUSBoverIPExist:Boolean;
begin
ShellExec('', ExpandConstant('{app}\CheckUSBoverIPExist.bat'),
'', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
ResultString:=GetIniString('SMIUSBoverIP','result',ResultString,ExpandConstant('{app}\result.ini'));
Result := true;
if (ResultString <> '0') then begin
Result := false;
end
end;
前面一直不懂,我们要做什么事情,inno serup的执行步骤是什么?想了很久,才知道它的一步一步的界面都已经为我们做好了,我们要做的就是FIles部分和Run部分。
files部分主要是添加文件到用户系统中去,你可以再这个过程的check进行条件安装,主要是check的函数需要自己写的。
有了前面一部分之后,就进行编译,通过了生成了exe文件,然后进行安装,可是怎么安装都安装不成功。一直想不通安装的动作动作子啊那里?后面看了别人的代码才知道在RUN部分。Run部分是核心,前面一直在做的是文件转移,使用devcon才是真正的添加硬件。
本人比较孤陋寡闻,也许这些东西很简单,一般人都不会有这样的疑惑。我是希望能够让那么有这样疑惑的人能够不要再像我这样花好长时间去弄这些简单的问题。