Custom Action : dynamic link library
工具: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的更多相关文章
- 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 ...
- 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 ...
- DYNAMIC LINK LIBRARY - DLL
https://www.tenouk.com/ModuleBB.html MODULE BB DYNAMIC LINK LIBRARY - DLL Part 1: STORY What do we h ...
- 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 ...
- [DLL] Dynamic link library (dll) 的编写和使用教程
前一阵子,项目里需要导出一个DLL,但是导出之后输出一直不怎么对,改了半天才算改对...读了一些DLL教程,感觉之后要把现在的代码导出,应该还要花不少功夫...下面教程参照我读的3个教程写成,所以内容 ...
- 动态链接库(Dynamic Link Library)
DLL INTRODUCTION A DLL is a library that contains code and data that can be used by more than one pr ...
- 动态链接库(Dynamic Link Library)学习笔记(附PE文件分析)
转载:http://www.cnblogs.com/yxin1322/archive/2008/03/08/donamiclinklibrary.html 作者:EricYou 转载请注明出处 注 ...
- How to Create DLL(Dynamic link library)
该文章属于在YouTube视频上看到的,链接如下: https://www.youtube.com/watch?v=EmDJsl7C9-k&t=3s 1.创建一个工程并建立一个控制台程序 2. ...
- How to debug Custom Action DLL
在MSI工程中,经常会遇到这样的情况: MSI 工程需要调用DLL(C++)中的一个函数实现某些特殊或者复杂的功能,通常的做法是在Custom Action 中调用该DLL . 那么在安装过程中,该C ...
随机推荐
- linux 常用命令 -- 系统管理工具包: 监视邮件的使用情况
清单 5. 获得磁盘使用情况统计信息 $ du -sk * 20 admin 1020 appleby 45828 applicants 13264 buy 11704 dev 11200 finan ...
- 关于cshtml中的js对动态编译支持的问题
问题:MVC4中支持对ViewBag.ViewDate等的动态编译,但是在js中对它的支持就是有问题.虽然是可以动态编译,但是动态编译之后,断点无法获取. $.getJSON("/api/A ...
- Objective-C 调用C++,C
1. 建立一个C++类 2. 写一个Adaptor的Objective-C类 3. 在其他Objective-C的逻辑中调用Adaptor类. 1.C++类 // // CPlusPlusClass. ...
- cocos2dx 运动+旋转动画 CCSequence CCAnimation CCAnimate CCMoveTo CCCallFuncN
cocos2dx 动画是个非常奇妙的东西~~. 这里看到的是一个物体,在运动的过程中会不断地翻转的过程. 两个动画一起来~~ 以下的代码中涉及到:CCAnimation(补间动画 ) CCAnima ...
- Cocos2dx 小技巧(十一) 小人虽短,但能够旋转
转眼五一就到了,放假三天应该做些什么呢?窝在家里钻研技术?写博客?no no no no,这样的"伤害"自己的方式实在让我无法忍受.本来和大学那伙人越好了一起去哪里玩玩,喝酒聊天啥 ...
- NYOJ109 数列转换 【守恒法】
数列转换 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描写叙述 有一个数列a1,a2,a3...an,每次能够从中随意选三个相邻的数ai-1 ,ai , ai+1 ,进行例 ...
- iOS利用视频做起始页
一个好的引导页会使得用户体验大大提升,利用视频来做,可以更简单的达到优雅的效果.使用MediaPlayer.framework框架下的AVPlayerLayer,它和Core Animation紧密地 ...
- iOS 10 升级后无法真机测试 Could not find Developer Disk Image
---2016年9月20日更新 iOS 升级到10之后,你会发现无法进行真机测试了.这种情况我在iOS 8.4 .9.3更新的时候也遇到过.原因是Xcode 的DeviceSupport里面缺少了iO ...
- java_泛型(构造器)部分实例
package ming; import java.util.ArrayList; import java.util.Collection; import java.util.List; class ...
- Android View的绘制机制流程深入详解(一)
本系列文章主要着重深入介绍Android View的绘制机制及流程,第一篇主要介绍并分析LayoutInflater的原理, 从而理解setContentView的加载原理.对于LayoutInfla ...