- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 wix 文件,它应该在安装期间调用自定义操作。自定义操作将创建程序所需的一些文件。由于 Wix 只会删除那些由安装程序安装的文件,因此将保留由自定义操作创建的文件。所以我求助于 Wix 提供的RemoveFile。
我有以下 Wix 文件。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="WixCustomAction" Language="1033" Version="1.0.0.0" Manufacturer="Sarvagya" UpgradeCode="1d77ebdc-2ba2-4b34-b013-7c8a8adcef5b">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes"/>
<Feature Id="ProductFeature" Title="WixCustomAction" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<!--<ComponentGroupRef Id="RemoveLeftOvers" />-->
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="WindowsVolume">
<Directory Id="INSTALLFOLDER" Name="LearningWix" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="SomeDLL">
<File Source="C:\boost_1_55_0_dyn\stage\lib\boost_atomic-vc100-mt-1_55.dll" />
</Component>
<Component Id="RemovingFiles">
<RemoveFile Id="ConfigRemove" Name="lpa.config" On="uninstall"/>
<RemoveFile Id="LogsRemove" Name="*.log" On="uninstall"/>
<RemoveFile Id="ProductCodeRemove" Name="productcode.txt" On="uninstall"/>
</Component>
</ComponentGroup>
<Binary Id="SetupCA" SourceFile="..\LearnCustomAction\bin\Release\LearnCustomAction.CA.dll"/>
<CustomAction Id="FileWrite" Execute="immediate" BinaryKey="SetupCA" DllEntry="WriteFileToDisk" />
<InstallExecuteSequence>
<Custom Action="FileWrite" Before="InstallFinalize"></Custom>
</InstallExecuteSequence>
</Fragment>
自定义操作将创建文件 lpa.config 和 productcode.txt。应用程序将创建 output.log, output.1.log, ... 。但是在编译过程中,出现以下错误
The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components using a Directory as a KeyPath or containing ODBCDataSource child elements cannot use an automatically generated guid. Make sure your component doesn't have a Directory as the KeyPath and move any ODBCDataSource child elements to components with explicit component guids.
我应该如何正确使用 RemoveFile 来删除剩菜?我提到了 this但没有帮助。
更新
我已通过在组件标记中添加 GUID 解决了这个问题。现在在上面的代码中添加 RemoveFolder
时,例如:
<RemoveFolder Id="LeftOverAppsRemove" On="uninstall" Directory="apps"/>
<RemoveFolder Id="LeftOverTempRemove" On="uninstall" Directory="temp"/>
我遇到问题 Unresolved reference to symbol 'Directory:apps' in section 'Fragment:'
。我该如何解决这个问题?
最佳答案
您只能使用 RemoveFolder
元素来删除空文件夹,这样作用不大。如果您有一个在应用程序目录中创建文件的 CustomAction,我建议您不要为这些创建 RemoveFile
元素。通常,您要在应用程序目录中创建包含一次性数据的子文件夹,并且必须为添加到该目录的每个文件创建删除元素。懒惰的方法是使用 RemoveFolderEx Element .如该页所述,您必须使用 Remember property pattern使这项工作。下面是如何实现这两种技术的示例:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Fragment>
<ComponentGroup Id="CommonFiles" Directory="INSTALLFOLDER">
<Component Id="SomeDLL" Guid="PUT-GUID-HERE">
<File Source="C:\boost_1_55_0_dyn\stage\lib\boost_atomic-vc100-mt-1_55.dll" />
<util:RemoveFolderEx Id="RemoveAdditionalFiles" On="uninstall" Property="REMOVAL"/>
</Component>
<Component>
<RegistryValue Root="HKCU" Key="SOFTWARE\YOURCOMPANY\YOURPRODUCT" Name="CompleteRemoval" Value="[INSTALLFOLDER]" Type="string"/>
<RemoveFolder Id="Cleanup" On="uninstall"/>
</Component>
</ComponentGroup>
<Property Id="REMOVAL">
<RegistrySearch Id="RemovalProperty" Root="HKCU" Key="SOFTWARE\YOURCOMPANY\YOURPRODUCT" Name="CompleteRemoval" Type="raw" />
</Property>
<CustomAction Id='SaveCmdLineValue' Property='REMOVAL_CMD'
Value='[REMOVAL]' Execute='firstSequence' />
<CustomAction Id='SetFromCmdLineValue' Property='REMOVAL'
Value='[REMOVAL_CMD]' Execute='firstSequence' />
<InstallUISequence>
<Custom Action='SaveCmdLineValue' Before='AppSearch' />
<Custom Action='SetFromCmdLineValue' After='AppSearch'>REMOVAL_CMD</Custom>
</InstallUISequence>
<InstallExecuteSequence>
<Custom Action='SaveCmdLineValue' Before='AppSearch' />
<Custom Action='SetFromCmdLineValue' After='AppSearch'>REMOVAL_CMD</Custom>
</InstallExecuteSequence>
</Fragment>
</Wix>
关于Wix RemoveFile 和 RemoveFolder 用于删除剩菜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28470189/
我正在尝试删除 FilesAdded 事件中不允许扩展名的文件。 (我不能使用过滤器参数,因为我需要一个独占列表)。 我有一些代码有点像这样: uploader.bind('FilesAdded',
Google AppScript 是一项非常有用的服务,但有一种我不了解的文件删除机制。同样的讨论适用于文件夹删除。我有 replied some questions on SO where file
我有以下 wix 文件,它应该在安装期间调用自定义操作。自定义操作将创建程序所需的一些文件。由于 Wix 只会删除那些由安装程序安装的文件,因此将保留由自定义操作创建的文件。所以我求助于 Wix 提供
我想在开始菜单中创建一个子文件夹,在我的例子中,PMFCompanyFolder 已经存在并包含链接,但我不想在卸载产品时删除它。 所以我不推送 RemoveFolder 属性,我得到: ICE64:
我使用了 dropzone.js ( http://www.dropzonejs.com/ )。我正在尝试添加删除按钮来删除图像。但我收到 javascript 未定义错误 Dropzone.
我正在使用 dropzone.js,我的“完成后删除”代码如下所示: Dropzone.options.myAwesomeDropzone = { init: function () {
本文整理了Java中net.lingala.zip4j.core.ZipFile.removeFile()方法的一些代码示例,展示了ZipFile.removeFile()的具体用法。这些代码示例主要
当我尝试创建安装程序时,出现以下错误: 目录 ProgramMenuDir 位于用户配置文件中,但未在 RemoveFile 表中列出。 如何解决这个问题?以下是我正在使用的目录结构:
我正在尝试使用 $cordovaFile 从 Android 设备中删除文件。要删除的文件是在以下位置使用 $cordovaFileTransfer 下载的。 ft.download(url, cor
我正在将用户使用 UIImagePickerController 拍摄的照片保存到用户的文档目录中。当应用程序成功上传图片到服务器后,我想删除本地保存的图片。 我像这样将图像保存到文档目录: /*Sa
我一直在听从这个问题中的建议。 How to add a WiX custom action that happens only on uninstall (via MSI)? 我有一个可执行文件作为
我在 StackOverflow 上发现了类似的问题,但我无法使这些建议的修复起作用。请参阅下面的代码部分。我是新来的,我不确定我错过了什么。我试图按照 WIX 文档中的示例进行操作。感谢您的帮助。
我是一名优秀的程序员,十分优秀!