工具:VS2010, Installshield 2008

实现功能:

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

参数1:Property 表中的 ProductName

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

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

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

步骤一、VS2010工程设置:

1> 创建win32 project , Application Type: DLL

以 C++ DLL 获取 MSI Property 中的 C-TEST 工程为例。

步骤二、InstallShield 工程设置:

1> 创建 Basic MSI 工程。

用向导创建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。

详细请参见:How to debug Custom Action DLL

步骤五、安装测试。

Custom Action : dynamic link library的更多相关文章

  1. Walkthrough: Creating and Using a Dynamic Link Library (C++)

    Original Link: http://msdn.microsoft.com/zh-cn/library/ms235636.aspx Following content is only used ...

  2. How to Use the Dynamic Link Library in C++ Linux (C++调用Delphi写的.so文件)

    The Dynamic Link Library (DLL) is stored separately from the target application and shared among dif ...

  3. DYNAMIC LINK LIBRARY - DLL

    https://www.tenouk.com/ModuleBB.html MODULE BB DYNAMIC LINK LIBRARY - DLL Part 1: STORY What do we h ...

  4. Walkthrough: Create and use your own Dynamic Link Library (C++)

    参考网站:https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-librar ...

  5. [DLL] Dynamic link library (dll) 的编写和使用教程

    前一阵子,项目里需要导出一个DLL,但是导出之后输出一直不怎么对,改了半天才算改对...读了一些DLL教程,感觉之后要把现在的代码导出,应该还要花不少功夫...下面教程参照我读的3个教程写成,所以内容 ...

  6. 动态链接库(Dynamic Link Library)

    DLL INTRODUCTION A DLL is a library that contains code and data that can be used by more than one pr ...

  7. 动态链接库(Dynamic Link Library)学习笔记(附PE文件分析)

    转载:http://www.cnblogs.com/yxin1322/archive/2008/03/08/donamiclinklibrary.html 作者:EricYou 转载请注明出处   注 ...

  8. How to Create DLL(Dynamic link library)

    该文章属于在YouTube视频上看到的,链接如下: https://www.youtube.com/watch?v=EmDJsl7C9-k&t=3s 1.创建一个工程并建立一个控制台程序 2. ...

  9. How to debug Custom Action DLL

    在MSI工程中,经常会遇到这样的情况: MSI 工程需要调用DLL(C++)中的一个函数实现某些特殊或者复杂的功能,通常的做法是在Custom Action 中调用该DLL . 那么在安装过程中,该C ...

随机推荐

  1. 终端神器 iterm

    1.简介 mac自带的终端terminal算蛮好用的, 但相比另一款优秀的终端软件iterm,iterm这款神器不逊于mac自带的终端.它支持了很多快捷键, 深受键盘党的喜爱. 2.下载 http:/ ...

  2. xcode4的环境变量,Build Settings参数,workspace及联编设置

    转自:http://www.cnblogs.com/lancidie/archive/2013/04/08/3007566.html 一.xcode4中的环境变量 $(BUILT_PRODUCTS_D ...

  3. Web API接口 安全验证

    在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端 ...

  4. ORACLE 毫秒与日期的相互转换

    毫秒转换为日期 SELECT TO_CHAR(1406538765000 / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY- ...

  5. 乐视mysql面试题

      http://blog.itpub.net/28916011/viewspace-2093197/ 最近,朋友去乐视面试了mysql DBA,以下是我据整理的乐视mysql面试题答案,供大家参考 ...

  6. UNIX标准化及实现之功能测试宏

    在头文件中定义了很多POSIX.1和XSI的符号.但是除了POSIX.1和XSI的定义之外,大多数实现在这些头文件中也加上了它们自己的定义.如果在编译一个程序时,希望它只使用POSIX定义而不使用任何 ...

  7. CTreeCtrl 控件总结

      一 基础操作  1 插入节点 1)插入根节点 //插入根节点 HTREEITEM hRoot; CString str=L"ROOT" hRoot=nTreeCtrl.Inse ...

  8. 傲娇Android二三事之操蛋的开发日记(第一回)

    武宗元年 十一月初四 霾 今日魔都,依旧仙雾环绕,仿佛蓬莱落凡尘.望着470这个鲜红的AQI修仙指数,贫道不禁吟道,“正是修仙好光景,雾霾时节又逢君”.但在这个只修bug,不修仙的时代,路上的行人都步 ...

  9. Ambiguous mapping found. Cannot map 'xxxxController' bean method

    1.背景 今天要做一个demo,从github上clone一个springmvc mybatis的工程(https://github.com/komamitsu/Spring-MVC-sample-u ...

  10. (转)CentOS 6.5下Redis安装详细步骤

    Redis简介:Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作 ...