2012-07-05 70 views
0

在我们的维克斯安装程序的项目,我们需要生成一个新的文件,让我们称之为FILEB的基础上,部署的文件,名为FILEA在托管自定义操作功能。换句话说,在组件声明中,我声明了FileA。在自定义操作中(发生在提交阶段),我需要基于FileA生成FileB。之后,由于FileA不再使用,我想在相同的自定义操作中将其删除。无法安装过程中删除部署文件与维克斯安装

在这里,问题来了:默认安装文件夹,这是程序文件,普通用户是不允许添加文件(生成FILEB)到这个文件夹中的自定义操作(我不是100%肯定我对,但在我的测试中就是这样,如果我将它安装在另一个文件夹中,则根本没有问题)。所以我想我需要授予创建文件的权限。为了做到这一点,我将CreateFolder元素添加到包含FileA的组件中。整个组件的声明是这样的:

<Component Id='COMPONENT_NAME' Guid='MY_GUID'> 
    <!--OTHER FILES IN THE COMPONENT--> 
    ... 
    <CreateFolder Directory='INSTALLDIR'> 
     <Permission CreateFile='yes' User='Everyone' GenericAll='yes' Delete='yes'/> 
    </CreateFolder> 
    <File Id='MyFileA' Name='FileA' Source='PATH_TO_FILEA' KeyPath='no' > 
     <Permission GenericAll='yes' User='Everyone' Delete='yes'/> 
    </File> 
    </Component> 

组件实际上属于组件组,它驻留在INSTALLDIR。在同一个组件元素中存在其他文件的原因是因为我希望另一个文件成为关键路径,因此删除FileA不会导致此问题。现在FileB的生成工作正常。但后来在相同的自定义操作中,删除FileA时遇到了问题。它只是说:“访问路径'DEPLOYMENT_PATH_TO_FILEA'被拒绝。”我认为问题在于FileA声明,这就是为什么我在File下的Permission元素中添加了Delete ='yes',希望能够将其删除(虽然我不确定这是否意味着在安装中可能删除)。但是我仍然得到这个错误。谁能告诉我我做错了什么?

的另一个问题是,我真的不知道什么是那些CreatFolder元素的目的。首先,如果目标是创建目录结构,我认为(嵌套的)目录元素已经这样做了。为什么在Component元素下面有这样的元素时,大多数情况下你可能希望目录结构与组件结构分离(组件只是使用目录引用来引用正确的目录)。其次,CreateFolder的默认目录属性是组件所在的父目录。但是,通常多个组件驻留在同一个目录中,就像我在这里:多个组件位于同一个组件组中,其目录元素引用INSTALLDIR。所以这些组件中只有一个具有CreateFolder元素,在我的情况下其Directory属性是所有这些组件的父目录。这种结构很难理解。我想我对CreateFolder元素有一些误解。有人可以启发我使用CreateFolder吗?谢谢!

谢谢!

回答

4

有一些问题解决在这里。首先,如果回滚被禁用,您应该知道Commit阶段的自定义操作不会执行。你应该真的有一个延期和回滚自定义操作。

其次,你不能告诉MSI安装文件,然后再删除它。这是适得其反的,只会引起维修问题。更好的解决方案(我假设您使用的是WiX DTF托管的自定义操作)是将FileA作为内容项包含在自定义操作项目中。这将导致文件在执行时存在于自定义操作的当前(temp)目录中。然后你可以生成fileb。对于回滚,您可以删除fileb。

您还需要创作一RemoveFile元素教微星删除卸载文件。否则,它不会因为MSI不知道您的进程外自定义操作所创建的任何有关fileb的信息。

否则这将会是有用知道FILEB的内容。如果这是一个xml文件,可以安装为fileb,然后使用xml wix扩展名进行转换,那将更容易实现。

+0

谢谢克里斯托弗,他们真的是有用的建议。我将修改我的WIX项目。该例程是从我们现有的Windows Installer项目中复制而来的。但我也明白你的意思是要删除安装中的已部署文件。顺便说一句,FileA是一个mdb文件,FileB是mde文件 – tete 2012-07-06 06:15:14

+1

是否有一个原因,你不能将你的mdb转换为mde作为构建过程的一部分,然后部署mde文件?我在这里没有经验,所以我不知道你可能试图解决的问题。 – 2012-07-06 17:26:43

+0

说实话,我也没有这方面的经验,虽然我问自己同样的问题。因为这就是我们当前的Windows Installer Project的工作原理,而我只是创建另一个部署项目的人:)我不熟悉Access编程。 – tete 2012-07-09 06:58:21