Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/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
安装后使用Wix删除目录和文件_Wix_Installation_Windows Installer - Fatal编程技术网

安装后使用Wix删除目录和文件

安装后使用Wix删除目录和文件,wix,installation,windows-installer,Wix,Installation,Windows Installer,在安装过程中,我需要在InstallExecuteSequence标记asl After=“InstallFinalize”中配置自定义操作中的一些额外文件 使用完这些文件后,我希望删除这些文件(和目录) 我该怎么做 我的InstallExecuteSequence如下所示: <InstallExecuteSequence> <Custom Action="UNINSTALLSERVICE" After="InstallInitializ

在安装过程中,我需要在InstallExecuteSequence标记asl After=“InstallFinalize”中配置自定义操作中的一些额外文件

使用完这些文件后,我希望删除这些文件(和目录)

我该怎么做

我的InstallExecuteSequence如下所示:

  <InstallExecuteSequence>
     <Custom Action="UNINSTALLSERVICE"
             After="InstallInitialize">REMOVE="ALL"</Custom>
     <Custom Action="CLEANUP"
             Before="RemoveFiles">REMOVE="ALL"</Custom>
     <Custom Action="INSTALLSERVICE"
             After="InstallFinalize" />
  </InstallExecuteSequence>
 <Custom Action="CLEANTEMP" After="InstallFinalize" />
并将其添加到序列中,如下所示:

  <InstallExecuteSequence>
     <Custom Action="UNINSTALLSERVICE"
             After="InstallInitialize">REMOVE="ALL"</Custom>
     <Custom Action="CLEANUP"
             Before="RemoveFiles">REMOVE="ALL"</Custom>
     <Custom Action="INSTALLSERVICE"
             After="InstallFinalize" />
  </InstallExecuteSequence>
 <Custom Action="CLEANTEMP" After="InstallFinalize" />
更新:不知道为什么刚才投票否决了这一点。下面的总结是合理的建议。 也许是因为缺少样品?我将添加几个链接。也: 在某些情况下,需要自定义操作来调整服务 安装,但如果您设计服务,则很少需要安装 正确-WiX还有一些结构可以帮助您进行常见的调整:

  • 菲尔·威尔逊的书中的样本(其他主题的更多样本更上一层):
  • 菲尔·威尔逊又一次和他的朋友见面了
  • Chris Painter和他的IsWiX教程:

通常不需要使用自定义操作来安装和配置服务。由于其全面的回滚支持和广泛的功能集,用于安装和配置服务的内置MSI功能非常优越。使用自定义操作会使事情变得非常复杂,增加不必要的风险,并且在回滚过程中几乎总是会失败,使系统处于无效状态

MSI表格有一个学习曲线——有很多选择,但根据我的经验,只有少数几个设置组合在一起才有意义。通常在安装期间停止和重新启动,卸载时停止和删除,以及卸载时的变体。在过去,我添加了自定义操作只是为了在服务正常关闭时等待,但这只是一个等待自定义操作,不会改变系统。对于这种情况,可能会有一些新的Wix特性,我并不知道


MSI表和用于安装服务。在Wix中,您需要处理等价的XML元素:以及更新的和。

您设置东西的方式似乎有很多问题:

  • InstallFinalize之后的自定义操作不会更改系统,并且它们将无法使用管理员权限运行。此外,您已经将自定义操作设置为延迟模式,并且这仅在InstallInitialize和InstallFinalize之间允许-这就是您提到的错误消息的内容
  • 有些人在InstallFinalize之后使用即时模式自定义操作。根据定义,这始终是一个错误,并且仅当整个安装程序以管理员权限运行时才起作用。即使如此,当与SCCM或公司世界中的其他软件分发系统一起分发时,它也常常会失败
  • 在安装过程中使用临时文件通常是不可取的。正如我在上面所评论的,这是一种“部署气味”。有些用途还可以,例如显示徽标和许可协议,但这些也倾向于编译到设置中并自动删除
  • 在安装过程中运行批处理文件是非常不可靠和容易出错的,如果安装过程中安装失败,可能会对系统进行无法回滚的更改
()将允许您在安装、卸载或两者同时删除文件。您不应该删除作为关联的Windows Installer组件一部分的文件,因为自修复可能会将它们放回原处

我相信,你需要的是:

  • 认真反思批处理文件和临时文件的使用。最有可能的是,它们带来的麻烦超过了它们的价值
  • 全面了解提升权限和Windows Installer的安全模型,以及(用户权限)和(提升权限)自定义操作之间的差异。由公认的微星专家

  • Glytzhof,我的问题不是关于安装/卸载服务,而是关于在安装过程中删除一些我需要的文件(不需要深入了解我为什么需要它们,我只是这样做)。我只想在安装过程中删除一些需要的文件,但不是在安装之后。安装过程中的临时文件是一种“部署气味”。这些文件在做什么?可能有更好的方法对您更简单。如果您不知道,WiX会创建一个Windows安装程序包。(实际安装中不涉及WiX。)您应该研究Windows Installer的设计原则。临时文件用于根据安装它们的服务器配置配置文件。该安装程序用于我们的DTAP环境,用于在具有不同配置文件的不同计算机上自动安装。设置中包括DTAP环境中所有服务器的所有配置文件。根据服务器名,有些是使用的,有些不是。在安装结束时,我不再需要所有配置文件,并希望删除目录。我并不是说我的解决方案是最好的解决方案,但是(很抱歉这么说),我不是在问我做的是否有错(在你看来,我这样做完全是愚蠢的),我只是问如何在安装后删除包含内容的目录。谢谢Glytzhkof。我完全理解你的意思。我完全同意你的看法。所以我想对Wix的所有用户说,不要像我一样使用这些设置。但在我的例子中,设置是DTAP环境的一部分。并且是在我们的域内运行的全自动服务的一部分。这些设置不发送给客户等。它们仅由我维护。并对安装进行全面监控。所以一方面我同意你的观点,另一方面,我想在完成安装后删除一些文件。