Inno Setup 安装inf文件的一个例子

简介: 原文 http://zwkufo.blog.163.com/blog/static/2588251201063033524889/ ; INF安装例子; [Setup]; 注意: AppId 的值是唯一识别这个程序的标志。

原文 http://zwkufo.blog.163.com/blog/static/2588251201063033524889/

; INF安装例子
; 

[Setup]
; 注意: AppId 的值是唯一识别这个程序的标志。
; 不要在其他程序中使用相同的 AppId 值。
; (在编译器中点击菜单“工具 -> 产生 GUID”可以产生一个新的 GUID)
AppId={{DC1559D2-A4CC-471F-8FDF-45F4278AFAEA}
AppName=我的程序
AppVerName=我的程序 1.5
AppPublisher=我的公司
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\我的程序
DefaultGroupName=我的程序
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "chinese"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "test.inf"; Flags: dontcopy

[code]
//安装inf的函数
function InstallInf(const InfFile, InfSection: string): Boolean;
var
  ResultCode: Integer;
begin
  if Exec(ExpandConstant('{sys}\rundll32.exe'), 'advpack.dll,LaunchINFSection '+AddQuotes(ExpandConstant(InfFile))+','+ExpandConstant(InfSection), ExpandConstant('{src}'), SW_HIDE, ewWaitUntilTerminated, ResultCode) then
  {如果上面的代码有问题,就改用下面这行}
//  if Exec(ExpandConstant('{sys}\rundll32.exe'), 'setupapi,InstallHinfSection '+ExpandConstant(InfSection)+' 132 '+AddQuotes(ExpandConstant(InfFile)), ExpandConstant('{src}'), SW_HIDE, ewWaitUntilTerminated, ResultCode) then
    Result:= (ResultCode = 1); {假设正常安装的返回代码是1的话}
end;

//定义按钮和要执行的操作
procedure MyButtonOnClick(Sender: TObject);
var
  tmpinf, srcinf: String;
  bbb: Boolean;
begin
  tmpinf:= ExpandConstant('{tmp}\test.inf');
  srcinf:= ExpandConstant('{src}\test.inf');
  ExtractTemporaryFile('test.inf'); //解压文件
  if RenameFile(tmpinf, srcinf) then  //移动文件到程序所在目录
    if InstallInf(srcinf, 'DefaultInstall') then
    //ShellExec('Install', srcinf, '', ExpandConstant('{src}'), SW_SHOW, ewWaitUntilTerminated, ResultCode) then  //安装inf
      bbb := True;
  //处理返回代码
  if bbb then
    MsgBox('安装成功!!', mbInformation, MB_OK) else
  begin
    MsgBox('安装失败!!', mbCriticalError, MB_OK);
  end;
  DeleteFile(srcinf);
end;

//创建按钮
procedure InitializeWizard();
var
  MyButton: TButton;
begin
  with WizardForm do
  begin
    MyButton := TButton.Create(WizardForm);
    with MyButton do begin
      Left := ScaleX(208);
      Top := ScaleX(192);
      Width := ScaleX(75);
      Height := ScaleX(23);
      Caption := '安装inf';
      OnClick := @MyButtonOnClick; //按钮点击事件
      Parent := WizardForm;
    end;
  end;
end;


procedure CurPageChanged(CurPageID: Integer);
var
  ResultCode: Integer;
begin
  if CurPageID = wpWelcome then
    WizardForm.NextButton.Enabled:= False; //禁用下一步按钮
end;

【from http://www.ppcqq.com/read.php?217

目录
相关文章
|
关系型数据库 MySQL Java
解决在ideal中导入MySql包,文件夹里面下载的有。但在ideal中无法引用的问题
解决在ideal中导入MySql包,文件夹里面下载的有。但在ideal中无法引用的问题
63 0
|
Python
PyCharm在用Django开发时debug模式启动失败显示can't find '__main__' module的解决方法
初次用Django开发web应用,在试图用Pycharm进行debug的时候,出现了一个奇怪的问题。以正常模式启动或者在terminal启动都没有问题。但是以debug模式启动时,显示`can't find '__main__' module”`报错。在网上找了很久都没有看到解决方法,最后在某乎上看到一篇文章,在启动时加上`--noreload`参数,既可以debug模式启动。
217 0
|
11月前
|
JavaScript Windows
vue : 无法加载文件 C:\Program Files\nodejs\vue.ps1,因为在此系统上禁止运行脚本。...
vue : 无法加载文件 C:\Program Files\nodejs\vue.ps1,因为在此系统上禁止运行脚本。...
400 1
|
Java C语言 Python
Python安装Jnius库报错DLL load failed:找不到模块
Python安装Jnius库报错DLL load failed:找不到模块
341 0
Python安装Jnius库报错DLL load failed:找不到模块
|
Go 开发工具
包gopkg.in/ini.v1在 Go 中提供 INI 文件读取和写入功能
包gopkg.in/ini.v1在 Go 中提供 INI 文件读取和写入功能
181 0
|
网络协议 应用服务中间件 Apache
|
C语言
Inno setup中定制安装路径
原文:Inno setup中定制安装路径 我的程序修改了安装界面,所以我的界面中提供了更改安装路径的方法。 用户修改后的路径会被传回inno setup脚本,脚本中需要做的事情如下: 1,写一个函数,来返回新的安装路径,如: function MyDestDir(SubDir:String):...
1825 0