自定义操作未被触发

时间:2015-02-17 11:18:28

标签: deployment custom-action

最近,我被分配了一个任务来为一个应用程序创建一个部署包,这个应用程序很有用,我是一个全新的应用程序。到目前为止,非常好..现在需要从zip文件中提取文件,该文件将与安装文件捆绑在一起。所以,我必须在“提交”中编写自定义操作。 Installer类的一部分。我在一个类型为'类库'的新项目中添加了Installer类。在同一解决方案下。我在" base.Commit(savedState)'之后编写了代码。

我尝试在事件入口点显示MessageBox,使用Debugger.Launch(),Debugger.Break()但不知何故,无论我做什么,似乎自定义操作根本不打算被击中应用程序只是安装自己。我搜索了很多网站和博客但到目前为止没有任何帮助。

我已将部署项目中的安装程序类(SampleApp.exe,在我的情况下)分配给所有自定义操作模式(安装,提交,回滚和卸载)。任何帮助。

P.S。我正在使用Visual Studio 2010安装项目。

先谢谢!

2 个答案:

答案 0 :(得分:0)

您应该尝试使用类库Dll,而不是可执行文件(通常用于服务之类的东西)。

如果您所做的一切都是在提交时调用,那么您并不需要所有节点。为什么要提交?在大多数情况下,安装是一样的。

如果您没有看到MessageBox,那么可能您的CA未被调用,这可能是因为它不是类库。请注意,您的CA未在交互式用户上下文中运行 - 它是从运行系统帐户的msiexec进程调用的,因此您必须非常明确(比如说)zip文件的路径以及任何用户配置文件夹可能会失败,因为系统帐户确实没有它们。

答案 1 :(得分:0)

这些文件是什么文件以及它们在磁盘上的位置?如果他们是用户个人资料文件,您可以将zip文件安装到每个计算机位置,然后让应用程序本身将文件解压缩首次启动时所需的位置即可。从您的设置中解压缩不是一个好习惯 - 它容易出错并且设计糟糕。

使用该应用程序可以正确的异常处理交互性(如果出现问题,可以通知用户)。完成解压缩后,在HKCU中设置一些注册表标志,这样它不会发生多次,并且每个用户执行一次解压缩。