一、模板代码

基本功能包括多路径安装、多语言、自定义图标。

[Setup]
ShowLanguageDialog=yes
AppCopyright=Copyright Reserved(C) , 360 Inc.
AppName={cm:Packagename}
AppVerName={cm:Packagename} {cm:Packagever}
LicenseFile=
OutputDir=C:/installer
UninstallFilesDir={code:getdlldir}/uninstall
ExtraDiskSpaceRequired=
UserInfoPage=false
VersionInfoVersion=1.0
VersionInfoCompany=360 Inc.
VersionInfoDescription=360
EnableDirDoesntExistWarning=true
AppID={{007F4590-89DE-4F87-9608-10F07CEFBBE9}
LanguageDetectionMethod=uilanguage
UsePreviousSetupType=true
DisableStartupPrompt=true
DirExistsWarning=no
WizardImageFile=C:/Users/zzk/Desktop/FILES/PR512.bmp
WizardSmallImageFile=C:/Users/zzk/Desktop/FILES/PR64.bmp
SetupIconFile=C:/Users/zzk/Desktop/FILES/PR32.ico
ArchitecturesAllowed=x64 ia64
OutputBaseFilename=win64_setup
VersionInfoTextVersion=1.0
AppPublisher=360 Inc.
AppPublisherURL=http://www.360.com
AppVersion=1.0
AppContact=zhangzhongke007@163.com
UsePreviousTasks=false
UsePreviousAppDir=false
AllowRootDirectory=true
CreateAppDir=false [Messages]
en.BeveledLabel=Created by 360 Inc.
chs.BeveledLabel=360荣誉出品
[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"; InfoBeforeFile: "readme-en.txt";
Name: "chs"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"; InfoBeforeFile: "readme-cn.txt";
[Components]
Name: dllall; Description: {cm:installDllFile}; Types: full; Flags: disablenouninstallwarning
Name: prmall; Description: {cm:installPrmFile}; Types: full; Flags: disablenouninstallwarning; Languages:
[_ISTool]
OutputExeFilename=C:/install/win64_setup.exe
[Files]
Source: ./avcodec-.dll; DestDir: {code:getdlldir}; Components: dllall
Source: ./avformat-.dll; DestDir: {code:getdlldir}; Components: dllall
Source: ./avutil-.dll; DestDir: {code:getdlldir}; Components: dllall
Source: ./custom.prm; DestDir: {code:getprmdir}; Components: prmall
[Dirs]
Name: {code:getdlldir}; Components: dllall
Name: {code:getprmdir}; Components: prmall [CustomMessages]
Packagename=360 desktop
Packagever=1.0. en.installDllFile=install dynamic link files
chs.installDllFile=安装动态库
en.installPrmFile=install Premiere Pro CC plugin files
chs.installPrmFile=安装插件文件 en.choicedirCaption=Select Destination Location
chs.choicedirCaption=选择安装路径
en.choicedirDescription=Where should % be installed?
chs.choicedirDescription=你想将%1安装到哪里呢?
en.SelectDirLabel=Setup will install % into the following folder.
chs.SelectDirLabel=安装程序将%1安装到如下位置
en.choicedir=Choice for installation directory of %
chs.choicedir=选择%1的安装位置 en.SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse.
chs.SelectDirBrowseLabel=想要继续请点击"下一步"。如果需要切换安装目录,请点击"浏览"
en.Button1Browse=&Browse...
chs.Button1Browse=浏览(&B)
en.Button2Browse=B&rowse...
chs.Button2Browse=浏览(&R) en.dlllabel=<The path to the system folders eg. C:/WINDOWS/System32>
chs.dlllabel=<系统目录如 C:/WINDOWS/System32>
en.prmlabel=<The plugin folder for Premiere Pro CC>
chs.prmlabel=<Premiere Pro CC公共插件目录> en.installedDir=installation directory of %
chs.installedDir=%1 的安装位置
[Code] var
Dlldir: TLabel;
Prmdir: TLabel;
BitmapImage1: TBitmapImage;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
NewStaticText1: TNewStaticText;
NewStaticText2: TNewStaticText; procedure ChoseDllFoldersClick(Sender: TObject);
var
choicedDIR:String;
begin
if BrowseForFolder(ExpandConstant('{cm:choicedir}'),choicedDIR,True) then
Edit1.Text := choicedDIR;
end; procedure ChosePrmFoldersClick(Sender: TObject);
var
choicedDIR:String;
begin
if BrowseForFolder(ExpandConstant('{cm:choicedir}'),choicedDIR,True) then
Edit2.Text := choicedDIR;
end; procedure choicedir_Activate(Page: TWizardPage);
begin
end; function choicedir_ShouldSkipPage(Page: TWizardPage): Boolean;
begin
Result := False;
end; function choicedir_BackButtonClick(Page: TWizardPage): Boolean;
begin
Result := True;
end; function choicedir_NextButtonClick(Page: TWizardPage): Boolean;
begin
Result := True;
end; procedure choicedir_CancelButtonClick(Page: TWizardPage; var Cancel, Confirm: Boolean);
begin
end; function GetInstallString(): String;
var
sInstallPath: String;
begin
sInstallPath := 'C:\Program Files\Adobe\Common\Plug-ins\7.0\MediaCore';
if RegValueExists(HKLM64, 'SOFTWARE\Adobe\Premiere Pro\CurrentVersion', 'Plug-InsDir') then
begin
RegQueryStringValue(HKLM64, 'SOFTWARE\Adobe\Premiere Pro\CurrentVersion', 'Plug-InsDir', sInstallPath)
end
Result := sInstallPath;
end; function choicedir_CreatePage(PreviousPageId: Integer): Integer;
var
Page: TWizardPage;
begin
Page := CreateCustomPage(
PreviousPageId,
ExpandConstant('{cm:choicedirCaption}'),
ExpandConstant('{cm:choicedirDescription,{cm:Packagename}}')
); { Dlldir }
Dlldir := TLabel.Create(Page);
with Dlldir do
begin
Parent := Page.Surface;
Left := ScaleX();
Top := ScaleY();
Width := ScaleX();
Height := ScaleY(); Caption := ExpandConstant('{cm:installedDir,DLL}') ;
Font.Color := -;
Font.Height := ScaleY(-);
Font.Name := 'Tahoma';
Font.Style := [fsBold];
end; Prmdir := TLabel.Create(Page);
with Prmdir do
begin
Parent := Page.Surface;
Left := ScaleX();
Top := ScaleY();
Width := ScaleX();
Height := ScaleY();
Caption := ExpandConstant('{cm:installedDir,PRM}') ;
Font.Color := -;
Font.Height := ScaleY(-);
Font.Name := 'Tahoma';
Font.Style := [fsBold];
end; { BitmapImage1 }
BitmapImage1 := TBitmapImage.Create(Page);
with BitmapImage1 do
begin
Parent := Page.Surface;
Left := ScaleX();
Top := ScaleY();
Width := ScaleX();
Height := ScaleY();
end; { Label1 }
Label1 := TLabel.Create(Page);
with Label1 do
begin
Parent := Page.Surface;
Left := ScaleX();
Top := ScaleY();
Width := ScaleX();
Height := ScaleY(); Caption := ExpandConstant('{cm:dlllabel, DLLs}');
Color := -;
Font.Color := ;
Font.Height := ScaleY(-);
Font.Name := 'Tahoma';
end; { Label2 }
Label2 := TLabel.Create(Page);
with Label2 do
begin
Parent := Page.Surface;
Left := ScaleX();
Top := ScaleY();
Width := ScaleX();
Height := ScaleY(); Caption := ExpandConstant('{cm:prmlabel, PRMs}');
Font.Color := ;
Font.Height := ScaleY(-);
Font.Name := 'Tahoma';
end; { Edit1 }
Edit1 := TEdit.Create(Page);
with Edit1 do
begin
Parent := Page.Surface;
Left := ScaleX();
Top := ScaleY();
Width := ScaleX();
Height := ScaleY();
TabOrder := ;
Text := ExpandConstant('{sys}');
end; { Edit2 }
Edit2 := TEdit.Create(Page);
with Edit2 do
begin
Parent := Page.Surface;
Left := ScaleX();
Top := ScaleY();
Width := ScaleX();
Height := ScaleY();
TabOrder := ;
Text := GetInstallString();
end; { Button1 }
Button1 := TButton.Create(Page);
with Button1 do
begin
Parent := Page.Surface;
Left := ScaleX();
Top := ScaleY();
Width := ScaleX();
Height := ScaleY();
Caption :=ExpandConstant('{cm:Button1Browse}');
TabOrder := ;
OnClick := @ChoseDllFoldersClick;
end; { Button2 }
Button2 := TButton.Create(Page);
with Button2 do
begin
Parent := Page.Surface;
Left := ScaleX();
Top := ScaleY();
Width := ScaleX();
Height := ScaleY();
Caption := ExpandConstant('{cm:Button2Browse}');
TabOrder := ;
OnClick := @ChosePrmFoldersClick;
end; { NewStaticText1 }
NewStaticText1 := TNewStaticText.Create(Page);
with NewStaticText1 do
begin
Parent := Page.Surface;
Left := ScaleX();
Top := ScaleY();
Width := ScaleX();
Height := ScaleY();
Caption := ExpandConstant('{cm:SelectDirLabel,Insta360 Plugin}');
Font.Color := -;
Font.Height := ScaleY(-);
TabOrder := ;
end; { NewStaticText2 }
NewStaticText2 := TNewStaticText.Create(Page);
with NewStaticText2 do
begin
Parent := Page.Surface;
Left := ScaleX();
Top := ScaleY();
Width := ScaleX();
Height := ScaleY();
// Caption := 'µ¥»÷¡°ÏÂÒ»²½¡±¼ÌÐø¡£Èç¹ûÄãÏëÑ¡ÔñÆäËüÎļþ¼Ð£¬Çëµ¥»÷¡°ä¯ÀÀ¡±¡£';
Caption := ExpandConstant('{cm:SelectDirBrowseLabel,{cm:Packagename}}');
Font.Color := -;
end; with Page do
begin
OnActivate := @choicedir_Activate;
OnShouldSkipPage := @choicedir_ShouldSkipPage;
OnBackButtonClick := @choicedir_BackButtonClick;
OnNextButtonClick := @choicedir_NextButtonClick;
OnCancelButtonClick := @choicedir_CancelButtonClick;
end; Result := Page.ID;
end; function getdlldir(Param: String): String;
begin
Result := Edit1.Text;
end; function getprmdir(Param: String): String;
begin
Result := Edit2.Text;
end; procedure InitializeWizard();
begin
choicedir_CreatePage(wpUserInfo);
end;

二、注意事项

需要注意的是,[Languages]这一节中的文件路径,Default.isl和ChineseSimplified.isl文件都是放在inno setup的安装目录下,放在其他目录中是找不到的。Default.isl默认的是英文版本,如果需要其他语言的翻译也好办,在官网上有很多网友贡献了翻译过的文本,下载下来放到inno setup安装目录下的Languages目录下即可。

一个简单的inno setup模板的更多相关文章

  1. 一个简单的Inno Setup例子

    ; 脚本由 Inno Setup 脚本向导 生成! ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! [Setup] ; 注: AppId的值为单独标识该应用程序. ; 不要为其 ...

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

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

  3. C++一个简单的手柄类模板

    #ifndef HANDLE_H #define HANDLE_H #include "Animal.h" template <typename T> class Ha ...

  4. 一个简单的javaweb项目模板

    Controller包:表现层(视图)层.用来显示数据和接收用户数据 Service包:业务逻辑层,用来处理页面.先写接口,后写实现类 Dao包:持久层(数据访问层).用来操作数据库 其中Dao包处于 ...

  5. inno setup介绍及官方网站地址

    使 用 笔 记 1.Inno Setup 是什么?Inno Setup 是一个免费的 Windows 安装程序制作软件.第一次发表是在 1997 年,Inno Setup 今天在功能设置和稳定性上的竞 ...

  6. Inno Setup 使用笔记

    使 用 笔 记https://blog.csdn.net/dongshibo12/article/details/79095971 1.Inno Setup 是什么?Inno Setup 是一个免费的 ...

  7. Inno Setup 精灵显示插件 InnoFairy (V2.0 版本)

    原文 http://restools.hanzify.org/article.asp?id=111 一个如影随形的小精灵会令到你的安装程序更加人性化. 就是这样一个功能的Inno Setup插件, 希 ...

  8. 简单的Verilog测试模板结构

    这里记录一下曾经用到的简单的测试模板,如下所示: //timescale `timescale 1ns/1ns module tb_module(); //the Internal motivatio ...

  9. inno setup读取注册表遇到的一个坑

    一.背景 目前,公司针对PR开发的一个插件需要发布到64位系统上.该插件包括一个prm格式的文件和若干个DLL文件.其中,prm文件需要复制到PR公共插件目录下,DLL需要复制到Windows系统目录 ...

随机推荐

  1. wdk中ramdisk代码解读

    入口函数,即驱动加载函数 NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) ...

  2. POI

    一.简介 POI(Point of Interest),中文可以翻译为“兴趣点”.在地理信息系统中,一个POI可以是一栋房子.一个商铺.一个邮筒.一个公交站等. 1.POI检索 百度地图SDK提供三种 ...

  3. 多线程中使用CheckForIllegalCrossThreadCalls = false访问窗口-转

    在多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,如果需要访问窗口中的控件,可以在窗口构造函数中将CheckForIllegalCrossThreadCalls设置为 false publi ...

  4. Principles of measurement of sound intensity

    Introduction In accordance with the definition of instantaneous sound intensity as the product of th ...

  5. 如何让你的JavaScript代码更加语义化

    语义化这个词在 HTML 中用的比较多,即根据内容的结构化选择合适的标签.其作用不容小觑: 赋予标签含义,让代码结构更加清晰,虽然我们可以在标签上添加 class 来标识,但这种通过属性来表示本体的形 ...

  6. dofile执行ANDROID APK里面的文件

    我使用dofile执行APK文件是不行的,比如 dofile("assets/res/flist")只能先拷贝到writablePath然后再dofile拿到数据后再清除这个临时文 ...

  7. .Net组件程序设计之异步调用

    .Net组件程序设计之异步调用 说到异步调用,在脑海中首先想到就是BeginInvoke(),在一些常用对象中我们也会常常见到Invoke()和BeginInvoke(), 要想让自己的组件可以被客户 ...

  8. Node.js学习笔记

    相关介绍 1.Node.js或者Node,是一个可以让javascript运行在服务器端的平台. 2.Node.js是一个为实时Web应用开发而诞生的语言,它从诞生之初就充分考虑了再实时响应.超大规模 ...

  9. 模拟淘宝购物,运用cookie,记录登录账号信息,并且记住购物车内所选的商品

    1.登录界面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...

  10. Docker实践:运行Python应用

    本文将使用fig应用编排实现一个python的计数器,并使用web展示. 阅读本文您需要具备以下知识: 1.了解Python 2.熟练Docker基础知识(包括Dockerfile语法) 3.了解Do ...