Installshield进阶指南
1 说明(适用范围)
阅读对象:对IS有一定基础的使用者。 适用版本:IS10~IS12
目的 :本手册为例子工程Example Project工程的配套文档,文档中的具体代码或设置可在Example Project中看到。
本手册使用is 12中的Windows Installer-Installscript MSI Project作为安装讲解工程。
2 实例说明
2.1 修改环境变量
2.1.1
利用“Enviornment Variables”视图修改环境变量
可以在Installation Designer界面的“System Configuration”-“Enviornment Variables”节点中修改环境变量,如图:
要创建一个新的环境变量或者修改该现有的环境变量值: 1、打开Environment Variables视图
2、右键单击EnvironmentVariables并选择AddEnvironment Variable。InstallShield将添加一个默认名为 NewEnvironmentVariable x的新环境变量。输入你想创建、修改或删除的环境变量名。
3、在右边窗口的环境变量属性表中编辑属性
环境变量属性
通过配置环境变量属性,你可以指定你想在目标系统上如何编辑现有的环境变量或者创建一个新变量。每一个环境变量的描述如下:
属性 Component 描述 选择你想把这个环境变量关联的构件。如果选择的构件安装或者卸载,根据你在环境变量的属性表中的设置,目标系统上环境变量会被创建、修改或删除。单击省略号按钮打开浏览构件对话框。 Value 输入这个环境变量的路径或值。你可以使用预定义的路径,象[INSTALLDIR]Bin。要输入多个路径,使用分号分隔 提示:如果On Install 属性设置为Remove,Value属性会被清除并且变成只读。 On Install 指明在关联的功能部件在目标系统安装时的动作。选择下列中的一个: ? Set-它与Placement属性协同工作,把Value设置成一个现有的环境变量。这个选项将在目标系统中没有指定的环境变量时创建一个环境变量,并且在安装期间进行设置。如果目标系统上已有指定的环境变量,它会在安装期间被设置。 ? Create-如果目标系统上没有指定的环境变量,将在目标系统上创建指定的环境变量并设置这个变量的值 ? Remove-从目标系统上删除环境变量 Placement 指明相对于现有的环境变量的值如何放置Value区域内的数据。选择下列选项中的一个: ? ? ? Append-这个选项把新值追加到现有环境变量值的后面 Prefix-这个选项把新值放置到现有环境变量值的最前面 Replace-这个选项用新值取代环境变量的原有值 提示:如果你在On Install属性中选择了Create并且指定的环境变量在目标系统上已经存在,这个Placement属性指明这个新值如何添加到现有的环境变量中或者是否替代现有的环境变量值。尽管这样,如果指定的环境变量如果在目标系统上不存在,它将被创建并且Placement的选项会被忽略。 On Uninstall 指明在关联的功能部件卸载时,环境变量是否从系统中删除。选择下面选项之一: ? Remove-这个选项是在关联的功能部件卸载时从目标系统上删除环境变量。如果On Install属性中设置的是Create,删除是删除整个环境变量。如果On Install属性中设置的是Set,删除是只删除变量值中追加的部分。 ? Leave-这个选项是在关联的功能部件删除时在系统中保留环境变量或者追加的值。 Type 如果目标系统是Windows NT 或者Windows 2000或者更高,这个属性指明环境变量的使用方式,是整个系统环境变量还是用户环境变量。如果目标系统是Windows9x,这个属性将被忽略。选择下列选项之一: System-创建修改或删除指定系统环境变量 User-创建修改或删除用户环境变量。这个环境变量针对于那个用户运行的安装程序,即谁登录的系统。
2.1.2
利用脚本修改环境变量
在Behavior and Logic-Intallscript视图,可以直接在脚本中设置,修改,删除环境变量。 系统环境变量的值保存在注册表
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SessionManager\\Environment中;
用户环境变量的值保存在注册表HKEY_CURRENT_USER\\Environment中。 在脚本中实际上即是对此二项下的各种值进行的操作。
例子代码:(该代码修改的是系统环境变量,如要修改用户级变量,替换为
szKey=\
RegDBSetDefaultRoot(HKEY_CURRENT_USER);即可)
#define WM_WININICHANGE 0x001A #define HWND_BROADCAST 0xffff NUMBER nResult; STRING szKey, szEnv; POINTER pEnv;
begin
szKey = \)
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
nResult=RegDBSetKeyValueEx(szKey,\,\if (nResult < 0) then
MessageBox(\
else
MessageBox(\TION); // Flush the NT registry to all applications. szEnv = \pEnv = &szEnv;
SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, pEnv ); endif;
//RebootDialog(\end;
2.2 调用外部DLL
在Behavior and Logic-Intallscript视图,通过脚本实现调用外部DLL的功能。 1、 在is脚本开头中声明需要调用的函数
如:prototype BOOL MyDllFileName.MyFunc(STRING, STRING, STRING);
在InstallShield中如果想改变参数的值,就用传引用的方法,在STRING前加上BYREF。
2、 在需要调用函数的function中加载DLL,如: UseDLL(SUPPORTDIR^\nResult= ShowDlg(szDir);
UnUseDLL (SUPPORTDIR^\
以本工程中使用到的Simple.dll中三个函数为例:(具体代码参见例子工程中)
3、 有些时候有可能调试会报错:
错误号码:0x80040704
描述:DLL函数调用导致错误的堆栈 可能是原型出错:MyDllFileName.MyFunc 安装程序将立即终止。
解决方法:prototype cdecl BOOL MyDllFileName.MyFunc(STRING, STRING, STRING);
可参考网络资源:
http://installshield.jaron.cn/forum/dispbbs.asp?boardID=3&ID=285266&page=1
2.3 修改XML文件
2.3.1
利用“XML File Changes”视图修改XML文件
可以在Installation Designer界面的“System Configuration”-“XML File Changes”节点中修改XML文件,参见“Installshield入门指南”中相关章节。 本文介绍一下在此节点中用变量给元素属性赋值的方法。
假设我们要实现用自定义变量TESTPATH的值赋给value属性,可以如下图中设置,