Windows Installer的Custom Action可以是exe, dll, vbs或js文件。
通过这个Custom Action,只要有足够的权限,基本上想做什么就做什么。
用C++编写Custom Action的例子(省略建各种工程的步骤):
1.EXE
(1).C++代码,Console Application。其中可以通过MsiDoAction调用一些别的Action。目前并没有了解。
通常通过Windows Installer 的Property来进行数据共享。
(2).在部署项目的File System View中新建一个文件夹,并将此exe添加到该文件夹中。
(3).在Custom Actions View中添加Custom Action,选择该exe。
也可以将这多个项目集中到一个解决方案中,通过添加项目的Primary Output来进行添加。
在exe文件中,是无法获取当前installer的session的,只能通过DLL或script来操作当前installer,参考[4]。
2.DLL
(1)新建一个空的DLL项目。添加如下代码
(2)将此DLL添加到CustomAction,然后在EntryPoint指定为FirstAction。
最初的代码根据[7]编写,原文手工编写了def文件,我使用了dllexport省去了这一步,但是原文没有加extern,导致找不到FirstAction。
然后发现[6]中有这样一个Note:
For DLLs created using Visual C++, entry points must be defined using the extern keyword in order to be visible to Windows Installer. For more information, see Using extern to Specify Linkage.
参考:
1.Visual Studio Setup - projects and custom actions
2.Walkthrough: Creating a Custom Action
4.Accessing the Current Installer Session from Inside a Custom Action
6.Unspecified module entry point for custom action '<name>'
7.http://www.flexerasoftware.com/webdocuments/PDF/dlls-for-ipwi.pdf