2014-07-14 110 views
3

在安装期间,我需要在自定义操作中的一些额外文件,这些文件在InstallExecuteSequence标签中配置为asl =“InstallFinalize”之后。使用Wix安装后删除目录和文件

使用这些文件后,我想要删除文件(和目录)。

我怎样才能做到这一点?

我InstallExecuteSequence lookst这样的:

<InstallExecuteSequence> 
    <Custom Action="UNINSTALLSERVICE" 
      After="InstallInitialize">REMOVE="ALL"</Custom> 
    <Custom Action="CLEANUP" 
      Before="RemoveFiles">REMOVE="ALL"</Custom> 
    <Custom Action="INSTALLSERVICE" 
      After="InstallFinalize" /> 
    </InstallExecuteSequence> 

如果我创建

ExeCommand="cmd /C RD "somedir" /s /q" 

自定义操作,并将其添加到顺序是这样的:

<Custom Action="CLEANTEMP" After="InstallFinalize" /> 

我得到一个构建错误:

Error 596 ICE77: CLEANCONFIG is a in-script custom action. 
It must be sequenced in between the InstallInitialize action 
and the InstallFinalize action in the InstallExecuteSequence table 
+1

临时文件是“部署的气味”。这些文件在做什么?有可能更好的方法,将会更简单。 –

+0

如果您不知道,WiX会创建一个Windows安装程序包。 (WiX不参与实际安装。)您应该研究Windows Installer的设计原则。 –

+0

临时文件用于配置基于它们被安装在服务器上的配置文件。该设置用于我们的DTAP环境,并用于在具有不同配置文件的不同机器上自动安装。设置中包含DTAP环境中所有服务器的所有配置文件。根据服务器名称,有些使用,有些则不使用。在安装结束时,我不再需要所有配置文件,并且希望删除目录。 – Dennis

回答

2

通常不需要使用自定义操作来安装和配置服务。由于其完整的回滚支持和丰富的功能集,内置的MSI功能非常出色。使用自定义操作使事情变得非常复杂,增加了不必要的风险,并且在回滚期间几乎总是失败,使系统处于无效状态。

MSI表有一个学习曲线 - 有很多选项,但根据我的经验,只有几束设置合在一起才有意义。一般在安装过程中停止并重新启动,在卸载时停止和删除以及这些变化。在过去,我添加了自定义操作只是为了等待服务正常关闭,但这只是一个等待自定义操作,不会更改系统。对于这种我不知道的场景,可能会出现新的Wix功能。

MSI表ServiceInstallServiceControl用于安装服务。在Wix中,您处理等效的XML元素:Wix ServiceInstallWix ServiceControl以及较新的Wix ServiceConfigWix ServiceConfigFailureActions

+0

Glytzhof,我的问题是不是安装/卸载服务,而是在安装过程中删除一些文件,我需要(没必要去了为什么我需要他们,我只是做)。我只是想在安装过程中删除一些我需要的文件,但不是在安装之后。 – Dennis

0

有很多问题,你似乎已经建立了事物的方式:InstallFinalize后

  • 自定义操作不改变系统,他们将无法使用管理员权限运行。另外,您已将自定义操作设置为延迟模式,并且仅在InstallInitialize和InstallFinalize之间允许 - 这是您引用的错误消息的内容。
  • 有些人在InstallFinalize之后使用即时模式自定义操作。根据定义,这总是一个错误,并且只有在整个设置以管理员权限运行时才会起作用。即使这样,在与企业界的SCCM或其他软件分发系统一起分发时,它也经常会失败。
  • 在安装过程中使用临时文件通常是不可取的。正如我上面评论的那样,这是一种“部署气味”。有些用法是可以的,比如显示徽标和许可证协议,但这些也可能会被编译到设置中并被自动删除。
  • 作为安装的一部分运行批处理文件非常不可靠且容易出错,并且可能会在安装过程中安装程序失败时对系统进行无法回滚的更改。

RemoveFile tableWix equivalent)将允许您在安装,卸载或删除这两个文件。您不应删除作为关联Windows安装程序组件的一部分的文件,因为自我修复可能会使其恢复。

我相信,你需要的是:

  1. 您使用的批处理文件和临时文件的严肃反思。他们很可能比他们的价值更麻烦。
  2. 的提升的权限和Windows安装程序的安全模型,充分认识和immediate mode(用户权限)和deferred mode(提升的权限)的自定义操作之间的差异。 Here is a good article由公认的MSI专家提供。在安装过程中
+0

感谢Glytzhkof。我完全理解你在说什么。我完全同意你的看法。所以我想对Wix的所有用户说,不要像我那样使用这些设置。但在我的情况下,这些设置是DTAP环境的一部分。并且是我们域中运行的全自动服务的一部分。这些设置不会发送给客户等等,他们只能由我维护。安装完全受到监控。所以一方面我同意你的看法,另一方面,我想在安装完成后删除一些文件。 – Dennis