转自:InnoSetup安装程序动态指定安装目录_linz1980_新浪博客
InnoSetup 作为一个优秀的安装程序建造工具,拥有非常强大的功能!
由于支持 pascal 脚本,功能方面更加自由.我相信并且也看到了,有非常多的 Delphi 程序员喜欢这个工具.因为 InnoSetup 本身就是 Delphi 的作品.
由于我们小组的开发需要,今天我接触了这个工具.后来在"为安装程序动态指定安装目录"这个环节遇到了困难,但上 baidu 和 google 都找不到结果.现在我已经解决了这个问题,我很希望将该初步知识写在这里,希望能给大家提供帮助.
通常遇到这个问题的朋友们都是在为程序打补丁的时候.因此非常建议你,在你所开发的程序里都添加一个注册表信息,记录一下程序的安装目录.如果后来需要打补丁,就可以轻易的找到这个目录了.
以下就是一个通过注册表找到需补丁的目录的例子(仅仅是 [code] 部分):
[code]
procedure InitializeWizard;
var
s: string;
begin
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Microsoft Games\Age of Empires II: The Conquerors Expansion\1.0', 'Exe Path', s) then
WizardForm.DirEdit.text := s;
end;
[code] 关键字是 innoSetup 的一个约定,也就是安装程序可自定义的代码.
InitializeWizard 方法在安装程序准备好向导之后被执行,因此可以在这里做一些初始化工作.
RegQueryStringValue 是内核支持的方法,很容易理解,就是通过注册表读取一个文本型的值.上面的例子演示了如何获取游戏"帝国时代2"的程序目录.
假如 RegQueryStringValue 返回 true 那么我们执行代码 WizardForm.DirEdit.text := s;
不必因为看到 WizardForm 的出现而感到不知所谓,WizardForm 是安装程序主窗口的指针(实例),每一个 InnoSetup 建造的安装程序都带上了这个实例,而指定安装目录的编辑框正是 WizardForm 里头的 DirEdit.(TWizardForm 在帮助文档里头有声明,然而还有更多的 TXForm)
到这来整个小结构已经很明了. InnoSetup 就是如此眷顾 Delphi 程序员的.:)
这里介绍的小知识,仅仅是 InnoSetup 的小菜一碟,它强大的功能等待你的发掘!