Inno Setup的常用脚本

分类: VC++神奇理论 2012-12-06 10:07 3234人阅读 评论(2) 收藏 举报
安装不同的目录:
[Files]
Source: "我的程序\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "我的程序\*"; 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: fixed 
Name: 组件2文件夹; Description: 组件2名称; Types: full 
Name: 组件3文件夹; Description: 组件3名称; Types: full 
[Files] 
Source: "E:\组件1文件夹\我的程序.exe"; DestDir: "{app}"; Flags: ignoreversion 
Source: "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); 
begin 
MsgBox('关于对话框。'+#13#10+'另起一行', mbInformation, MB_OK);//显示对话框 
end; 
{初始化安装向导时会触发的过程,这个过程的名字是INNO内部定义的,不能修改} 
procedure InitializeWizard(); 
begin 
with TButton.Create(WizardForm) do//在WizardForm上面创建一个按钮 
begin 
Left := 32;//按钮距WizardForm左边的距离 
Top := 302;//按钮距WizardForm上边的距离 
Width := WizardForm.CancelButton.Width;//按钮的宽度,这里定义跟'取消'按钮等宽 
Height := WizardForm.CancelButton.Height;//按钮的高度 
Caption := '关于(&A)...';//按钮上的文字 
Font.Name:='宋体';//按钮文字的字体 
Font.Size:=9;//9号字体 
OnClick := @ButtonAboutOnClick;//单击按钮触发的过程,就是前面的'ButtonAboutOnClick'过程,注意前面不要漏掉 
Parent := WizardForm;//按钮的父组件,也就是按钮'载体',这里是WizardForm(安装向导窗体) 
end; 
end;

设置界面文字颜色: 
[Code] 
procedure InitializeWizard(); 
begin 
WizardForm.WELCOMELABEL1.Font.Color:= clGreen;//设置开始安装页面第一段文字的颜色为绿色 
WizardForm.WELCOMELABEL2.Font.Color:= clOlive;//设置开始安装页面第二段文字的颜色为橄榄绿 
WizardForm.PAGENAMELABEL.Font.Color:= clred;//设置许可协议页面第一段文字的颜色为红色 
WizardForm.PAGEDESCRIPTIONLABEL.Font.Color:= clBlue; //设置许可协议页面第二段文字的颜色为蓝色 
WizardForm.MainPanel.Color:= clWhite;//设置窗格的颜色为白色 
end;

判断所选安装目录中原版主程序是否存在:

[Code] 
function NextButtonClick(CurPage: Integer): Boolean; 
begin 
Result:= true; 
if CurPage=wpSelectDir then 
if not FileExists(ExpandConstant('{app}\主程序.exe')) then 
begin 
MsgBox('安装目录不正确!', mbInformation, MB_OK ); 
Result := false; 
end; 
end;
 
 
注:
{app}表示默认安装路径为C:\Program Files\我的程序\
{cf}表示默认安装路径为C:\Program Files\Common Files\我的程序\

颜色:
clBlack(黑色),clMaroon(暗红),clGreen(绿色),clOlive(橄榄绿),clNavy(深蓝),clPurple(紫
色),clTeal(深青),clGray(灰色),clSilver(浅灰),clRed(红色),clLime(浅绿),clYellow(黄
色),clBlue(蓝色),clFuchsia(紫红),clAqua(青绿),clWhite(白色)。te(白色)。
增加path路径:
[Register]
Root: HKLM; Subkey:
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\Environment"; ValueType: string; ValueName: "Path"; ValueData:
"{olddata};{app}";Flags:uninsdeletekey

0、调用DOS命令或批处理等其它命令行工具等

Exec(ExpandConstant('{cmd}'), '/c dir c:\ >a.txt',ExpandConstant('{app}'), SW_SHOWNORMAL, ewNoWait, ResultCode);

1、不显示一些特定的安装界面 
[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

如果是自定义的窗体,则PageID可能是100,你可以在curPageChanged(CurPageID: Integer)方法中打印出到curpageid到底是多少。

2、获取SQLserver安装路径
var 
dbpath:string;
rtn:boolean;
rtn := RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\MSSQLServer\Setup','SQLPath', dbpath);
if (!rtn) then dbpath := ExpandConstant('{app}');

3、获取本机的IP地址
ip:string;
rtn:boolean;

//{083565F8-18F0-4F92-8797-9AD701FCF1BF}视网卡而定见LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards处
rtn :=RegQueryStringValue(HKEY_LOCAL_MACHINE,
'SYSTEM\CurrentControlSet\Services\{083565F8-18F0-4F92-8797-9AD701FCF1BF}\Parameters\TcpIp','IpAddress',
ip);
if (not rtn) or (ip='0.0.0.0') or (ip='') then ip := '127.0.0.1';

4、检查数据库是否安装
//检查是否已安装SQL
try
    CreateOleObject('SQLDMO.SQLServer');
except
    RaiseException('您还没有安装SQL数据库.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
end;

5、根据环境变量选择组件,获取系统环境变量值见方法6
procedure CurPageChanged(CurPageID: Integer);
var
path:string;
rtn:boolean;
begin
//MsgBox(inttostr(curpageid),mbInformation,mb_ok);
if (curpageId =7) then
begin
    rtn := checkTomcat6(path);
    if rtn then//如果系统以前没安装tomcat则选中组件,否则不选中
    begin
       WizardForm.ComponentsList.CheckItem(2,coUnCheck);
       WizardForm.ComponentsList.ItemEnabled[2] := false;
    end;
end;
end;

6、系统环境变量操作
读取:
function GetEnv(const EnvVar: String): String;
举例:GetEnv('java_home')
设置:
[Setup]
ChangesEnvironment=true

[code]
//环境变量名、值、是否安装(删除)、是否所有用户有效
procedure SetEnv(aEnvName, aEnvValue: string; aIsInstall: 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 length(sOrgValue)>0 then aEnvValue := ';'+ aEnvValue;
          if x = 0 then Insert(aEnvValue,sOrgValue,length(sOrgValue) +1);
      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;

7、获取NT服务安装路径

Windows服务在系统安装后会在注册表的 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\"下
以服务的ServiceName建1个目录,
目录中会有"ImagePath"

举例获取tomcat6服务安装路径:
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\tomcat6','ImagePath', sPath);

------------------------------------------------------------------------
算不上原创,可也花费了很多时间心血查资料、整理、调试

Inno Setup的常用脚本的更多相关文章

  1. inno setup教程解释脚本

    inno setup教程解释脚本 2007-04-08 21:31:36|  分类: 科技-> Inno Setu |  标签:inno   |举报 |字号 订阅     下载LOFTER客户端 ...

  2. [InnoSetup]Inno Setup软件打包脚本

     脚本由 Inno Setup 脚本向导 生成! ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!   #define MyAppName "SFT期货交易系统&quo ...

  3. 【Inno Setup】Pascal 脚本 ---- 事件函数

    转载 事件函数 Inno Setup支持以下函数和过程. 1. [安装初始化]该函数在安装程序初始化时调用,返回False 将中断安装,True则继续安装,测试代码如下: function Initi ...

  4. 分享一个自用的 Inno Setup 软件打包脚本

    此脚本支持打包mysql.安装mysql服务.安装windows服务.操作ini文件.操作注册表.高效压缩文件等功能,基本能满足常用的软件打包需求. ;定义各种常量 #define MyAppName ...

  5. Inno Setup执行SQL脚本的方法

    作为和NSIS并立的.两个最流行的免费Windows应用程序安装包制作工具之一,Inno在学习难度上相对要低一些,非常适合对一些简单的桌面程序打包.但对于较复杂的安装过程,或者Web应用程序来说,我个 ...

  6. Inno Setup for Windows service

    Inno Setup for Windows service? up vote86down votefavorite 77 I have a .Net Windows service. I want ...

  7. 使用Inno SetUp脚本打包Winform程序

    在开发桌面程序时,往往需要用到打包工具将程序打包为exe可执行文件. 之前在项目中用了下 InstallShield Limited Edition for Visual Studio  2015,它 ...

  8. INNO SETUP脚本向导创建的基本脚本

    脚本范例分析:先来看看一段用INNO SETUP脚本向导创建的基本脚本的[Setup]段: [Setup]   AppName=Premiere 6.5 汉化补丁-----------------(程 ...

  9. inno setup 脚本常用修改 转

    http://blog.sina.com.cn/s/blog_72c2eb350100y2sa.html 有人提及想更换安装界面的图片,其实方法很简单,只需要修改inno setup安装目录下的Wiz ...

随机推荐

  1. C#类和成员的修饰符

    C#中public.private.protected.internal.protected internal & (2010-09-22 13:33:45)转载 标签: 杂谈 分类: C# ...

  2. Java 迭代器理解

    1.Iterator(迭代器) 作为一种设计模式,迭代器可以用于遍历一个对象,对于这个对象的底层结构不必去了解. java中的Iterator一般称为“轻量级”对象,创建它的代价是比较小的.这里笔者不 ...

  3. MATLAB 损失函数画图

    损失函数画图 Hinge loss function: \[H(z) = max(0,1-z)\] $\psi$-learning loss function: \[{\phi _s}(z) = \l ...

  4. Android WebView的使用

    WebView是View的一个子类,使用它可以在App中嵌入H5页面,可以跟js互相调用. webview有两个方法:setWebChromeClient和setWebClient setWebCli ...

  5. PDF 补丁丁 0.4.1.728 测试版发布

    书签编辑器新增预览界面,可查看书签所连接到文档的页数. 该功能将继续完善,请各位关注.

  6. PDF 补丁丁 0.4.1.688 测试版发布(请务必用其替换 682 测试版)

    修复了测试版682 损坏书签.读取字符宽度表出错的问题.请下载了旧测试版的网友马上换用新的测试版.

  7. Entity Framework系列

    这个系列主要记录学习EF的过程和碰到的问题以及解决问题的方法. EF中的那些批量操作 EF的Model First

  8. NOIP 2006 解题报告

    第一题: 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  9. long long 读数scanf的转换 #define

    在win32的评测系统下,long long scanf 要用"%I64d" ,而网上评测和考试要用"%lld",因此,难免有点麻烦,还会runtime err ...

  10. Rhel6-tomcat+nginx+memcached配置文档

    理论基础: User - > web ->nginx  ->tomcat1 ->*.jsp 80          8080 ↓      -> tomcat2 html ...