首页 > 代码库 > Custom Action : dynamic link library

Custom Action : dynamic link library

工具:VS2010, Installshield 2008

实现功能:

创建一个C++ win32 DLL的工程,MSI 工程需要调用这个DLL,并将MSI工程中的两个参数,传递给DLL,

参数1:Property 表中的 ProductName

参数2:操作 MSI 工程的 installer database 的 Handle 

 

对参数1的操作:通过对话框的方式显示出来。

对参数2的操作;读取 Property 表中的 ProductName 属性,通过对话框的方式显示出来。

 

步骤一、VS2010工程设置:

1> 创建win32 project:winPro , Application Type: DLL

2> 编码, 详细内容请看 C++ DLL 获取 MSI Property

步骤二、InstallShield 工程设置:

1> 用向导创建Custom Action。

2> Basic Information.

输入Name(必填项)和 Comment(可选项).

 

3> Action Type.

DLL 是 Dynamic Link Library 的缩写,即动态连接库。

 

4> Function Definition.

 

 

Return Property的设置:

需要事先在Property 表中插入一个属性如CAValue,用来接收返回值,默认设为0。

 

这里需要注意的是function’s name 以及Return Type。

1)这里的Function name 是DLL的输出函数,有可能会和程序中的名称不一致(为什么有的时候会不一致?不详~ 有知道的大虾,帮忙介绍一下)。

如何查看DLL的出口函数名称?

右键点击DLL,用Dependency Walker打开,在窗口的右侧列表里会看到出口函数的名称。选中该函数,右键“Copy Functions”,拷贝函数的名称。

资料参考:DLL详解及Denpendcy Walker的使用

 

2) Return value

设置Return value,用来判断函数调用是否成功。

在程序中根据是否成功执行,设置不同的返回值(例如,成功返回0,失败返回1)。

Custom Action (以下简称CA)是否接收返回值,需要在步骤6>中设置。

Custom Action接收返回值,会以0为判断标准。

如果返回值是0,MSI会认为CA执行成功,安装继续;

如果返回值为非0,MSI会认为CA执行失败,安装会被退出。

 

5>  Action Parameters.

点击“Browse”,选择DLL。

 

6> Additional Options

设置是否接收函数的返回值。

 

7> Respond Options.

 

 8> Insert into Sequence.

设置CA执行的顺序。

将CA 放在Execute Sequence 中的好处是,用户无论通过界面安装还是静默安装,该CA 都会被执行;

如果将CA放在UI Sequence 中,而安装包是静默安装,那么该CA是不会被执行的。

 

 9> 以上CA 的设置完成。

 

步骤三、编译 VS工程,MSI 工程。

 

步骤四、Debug 调试DLL。

 

步骤五、安装测试。