Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/installation/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 如何在自定义操作中使用VS Installer类_Installation_Windows Installer_Custom Action - Fatal编程技术网

Installation 如何在自定义操作中使用VS Installer类

Installation 如何在自定义操作中使用VS Installer类,installation,windows-installer,custom-action,Installation,Windows Installer,Custom Action,除了stackoverflow中的一个之外,还有几十个问答条目!我发现它接近这个问题,但没有教会我需要什么。我有一个几乎简单的安装:一个Windows服务和一个相关的托盘图标应用程序。它们可以与标准VS安装项目一起安装。安装文件后,我需要向用户显示一个对话框,以在服务的exe.config文件中设置一些参数。在该对话框中,用户应该能够中止安装。我尝试了两种自定义操作过程的方法,但在使安装回滚时,每种方法都遇到了问题 方法1:自定义操作的exe,在提交时运行。 这类工作。应用程序返回一个非零的退出

除了stackoverflow中的一个之外,还有几十个问答条目!我发现它接近这个问题,但没有教会我需要什么。我有一个几乎简单的安装:一个Windows服务和一个相关的托盘图标应用程序。它们可以与标准VS安装项目一起安装。安装文件后,我需要向用户显示一个对话框,以在服务的exe.config文件中设置一些参数。在该对话框中,用户应该能够中止安装。我尝试了两种自定义操作过程的方法,但在使安装回滚时,每种方法都遇到了问题

方法1:自定义操作的exe,在提交时运行。 这类工作。应用程序返回一个非零的退出代码,并发生安装回滚。我不喜欢的是:

当用户选择取消后退出应用程序时,安装会显示一条错误消息,说明安装有问题,用户应与供应商联系。由于情况并非如此,我更希望用户取消更正确的消息安装,或者根本不发送消息。 服务和托盘应用程序的项目输出都必须列在所有四个自定义操作部分下,否则我的对话框将不会出现。相反,会出现有关缺少InstallState文件的错误,并且安装始终失败。直觉上,这似乎是错误的。 方法2:安装程序作为自定义操作,在安装或提交时运行。 对我来说,这只是自定义操作中列出的一项,但让流程回滚比方法1更糟糕。似乎我必须在重写的方法Install/Commit中抛出一个异常,然后在回滚发生之前,它会给我几个错误对话框,然后回滚并不总是卸载服务


在不使用WiX或类似选项的情况下,最干净的方法是什么

创建一个自定义安装对话框,向用户询问您的选项 使用此对话框设置的安装程序属性修改服务配置文件您可以使用自定义操作或其他安装程序编写工具的XML支持 这样,在安装之前就可以收集信息,用户也可以毫无问题地中止安装

VisualStudio不支持这种方法,但可以使用免费或商业设置创作工具来完成

如果要坚持自定义操作,可以尝试以下操作:

确保您的自定义操作已延迟,并且在提交期间未运行。提交意味着已执行安装,并且没有回滚 使用Win32 DLL显示自定义对话框;通过这种方式,可以显示更友好的用户退出对话框,而不是致命错误对话框
简单的答案是不要使用VS安装程序类。它们有许多基本的设计缺陷。我建议您来看看Windows安装程序XML的WIX部署工具基金会DTF。DTF是托管代码的一个非常优秀的托管模型/互操作库,并输出从MSI角度与C/C++自定义操作兼容的DLL。它们可以作为自定义操作被任何MSI创作工具使用,而不仅仅是WiX安装程序


谢谢,克里斯和@Cosmin。那么,我没有额外的工具就陷入困境了?在过去的几天里,我对WiX教程感到不知所措,但我确实安装了它,并用Voctive播放了一些。与VS的集成非常诱人,如果这是一条路的话,那么我现在缺少的是一个几乎简单的示例,它将带我端到端地完成整个过程。我不知道如何使用DTF添加的整洁的东西,也没有任何东西告诉我如何为VS应用程序构建WiX文件,比如说,3个项目程序集。我必须买书,或者在某个地方有一个以VS为中心的教程?DTF将你的C变成一个C++的DLL自定义动作。VisualStudio可以编写C++的DLL自定义操作,因此它应该易于集成。另外,在我的博客上还有VDPROJ、DTF、WiX的例子要看。我搜索了你2008年5月的档案,找到了关于DTF的评论和你关于使用DTF的讨论,这实际上是我所有兴趣的开始,但没有完整的例子。我错过了吗?我有种感觉,很多人认为我缺少的东西太琐碎了,无法在他们的作品中涵盖,但我却被困在了这一点上。