wix - 如何删除非空文件夹

2023-11-23

我已阅读该网站上存在此类问题的所有主题,但找不到我需要的内容。

我有一个程序的两个版本:旧版本和新版本。 在旧版本中我有文件夹 f1。 在新版本中我没有这个文件夹f1。

当新程序的安装程序检测到旧版本时,它会删除该旧版本,但不会删除文件夹 f1。

如何从新版本的安装程序中删除 f1?

      <Component Id ="deleteall"  Guid="AA11A32B-9E1E-458A-8C94-3EFEDA77E494" >
        <RemoveFolder Id='iDocDir' On='both' />
      </Component>

      <Directory Id="iDocDir" Name="iDocs">
      </Directory>

不工作=(


您应该查看RemoveFolderExUtilExtension 中的元素。它完全符合您的要求。鲍勃·阿恩森 (Bob Arnson) 之前曾在博客中谈到过这一点。

<Component Id="deeletall" Guid="PUT-GUID-HERE">
    <util:RemoveFolderEx Id="RemoveiDocDir" On="uninstall" Property="iDocDir" />
</Component>

它的工作原理是将临时行写入RemoveFile桌子。但是,如手册中所述,使用此功能有一些限制:

因为它可能会极大地影响 Windows Installer 的文件成本计算, 临时行必须在 CostInitialize 标准之前写入 行动。不幸的是,MSI 不会为 包中的目录层次结构,稍后在 CostFinalize 中 行动。

针对删除文件夹的典型用例的简单解决方法 uninstall是将目录路径写入注册表并加载 它在卸载过程中。

如果您使用自定义操作来设置属性,请确保它们是 安排在 WixRemoveFoldersEx 自定义操作之前。

鲍勃的帖子中也提到:

由于添加要删除的目录和文件会影响MSI的文件 成本核算,RemoveFolderEx 必须在成本核算之前完成其工作。 不幸的是,MSI 没有设置目标目录的属性 直至成本核算完成后。

如果您已经保存了之前的安装路径(Rob 解释了如何执行此操作)here)在注册表中,没问题,因为 AppSearch 操作在 CostInitialize 之前运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wix - 如何删除非空文件夹 的相关文章

  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • Python - 使用“导入信号”处理 CTRL+D

    I can currently handle CTRL C via def hand inter signum frame print hey nice job signal signal signal SIGINT hand inter
  • MAUI blazor 发生了未处理的错误

    如果程序中有错误 我会收到 发生未处理的错误 通过 Blazor Web 程序集 我可以在浏览器中打开开发人员工具来获取所发生情况的详细信息 这在 Blazor MAUI 中是不可能的 那么如何获取 Blazor MAUI 中的错误详细信息
  • 按下 JFrame 中的按钮后打开 JPanel [重复]

    这个问题在这里已经有答案了 我知道有人问过这个问题 但我未能找到解决方案 我创建了一个JFrame对于登录 我想在按下 Cont Nou 按钮后为新帐户打开一个带有 jpanel 的新窗口 但不知道如何使初始框架消失并显示带有 jpanel
  • 需要在 ExtendScript 中对对象进行 JSON 字符串化

    我正在使用 ExtendScript 处理 Indesign 文档链接的元数据信息 我想使用将对象转换为字符串JSON stringify但是当我使用它时 我收到错误消息 can t execute script in target eng
  • 为什么“if constexpr”的错误分支会被编译?

    为什么这段代码在编译时会出错 我的知识 还有this of if constexpr 说else块不应该被编译 if constexpr true int a 10 else int b 10 错误是 error expected or b
  • .Net Core 上的 OData 未在 $select 上返回正确的结果

    我已将 OData 添加到我的 WebAPI 项目中 版本 核心3 1 OData 7 3 0 测试版 以便与 Core 3 x 配合使用 EF 核心 3 1 0 这是我的startup cs public class Startup pu
  • Django:IE 无法加载本地主机或加载速度非常慢

    我刚刚开始学习 Django 在我的计算机上构建一个项目 运行 Windows 7 64 位 Python 2 7 Django 1 3 基本上 无论我写什么 它都会立即加载到 Chrome 和 Firefox 中 但对于 IE 版本 9
  • 读取 Cobol 生成的文件

    我目前正在编写一个 C 应用程序 该应用程序位于两个现有应用程序之间 我对第二个应用程序的了解是它处理第一个应用程序生成的文件 第一个应用程序是用 Cobol 编写的 脚步 1 Cobol 应用程序 写入一些文件并复制到目录中 2 第二个应
  • 在 vim 中将 ex 命令重定向到 STDOUT

    我正在尝试编写一个命令将 vim 的突出显示信息转储到 STDOUT 我可以成功写入这样的文件 vim redir gt outfile hi redir END q 在这之后 outfile包含正是我想要的 但我宁愿输出到 STDOUT
  • 使用 wget 和 SFTP 获取文件 [关闭]

    Closed 这个问题是无关 目前不接受答案 大家好 我每天晚上在 Linux 服务器上运行一个脚本 该脚本打算使用 wget 和 ftp 协议从另一个服务器获取文件 这些文件位于无法通过 HTTP 访问的文件夹下 这是使用的命令行 wge
  • std::list<>::sort 稳定吗?

    我找不到这个问题的任何明确答案 我想大多数实现都使用稳定的合并排序 但是稳定性是要求还是副作用 C 标准 ISO IEC 14882 2003 说 23 2 2 4 31 Notes 稳定 保留等效元素的相对顺序 如果抛出异常 列表中元素的
  • 在 if 语句中,cin 如何计算为 true?

    我以为 if true execute this statement 那么如何if std cin gt gt X 当没有什么 真实 的时候 执行为 true 吗 我可以理解如果是的话if x lt y or if y operator x
  • 在 ASP.NET Core 中显示 SelectList 中的数据

    我尝试了几种不同的方法 我不知道为什么 但我的 SelectList DropDown 是空的 它显示没有数据 我不确定我哪里出错了 我有一个 ASP NET Core 应用程序 实体框架核心 数据库第一 我正在使用存储库模式 这是我的模型
  • Linq、OrderByDescending、First 和邪恶的 DefaultIfEmpty

    希望这是我不理解基本知识的一个简单问题 下面是我正在开发的应用程序中的两个 Linq 语句 EDMXModel Classes Period p1 entities Periods DefaultIfEmpty null OrderByDe
  • 覆盖 Rails 3 中的默认脚手架生成器

    我已经为 Rails 3 中的控制器创建了一个生成器 现在我想在使用脚手架生成器时使用这个生成器作为默认生成器 那可能吗 您的自定义控制器文件的正确位置是lib templates rails scaffold controller con
  • 如何将 ISO 8601 日期时间字符串转换为 Python 日期时间对象? [复制]

    这个问题在这里已经有答案了 我得到一个格式类似于 2009 05 28T16 15 00 的日期时间字符串 我相信这是 ISO 8601 一种黑客选项似乎是使用解析字符串time strptime并将元组的前六个元素传递到日期时间构造函数中
  • 如何在多个 CruiseControl.NET 版本之间共享标签值?

    我在 CruiseControl NET 中设置了两个项目 CI 构建和夜间构建 它们都执行相同的 NAnt 脚本 但参数不同 CruiseControl NET 标签 当前由默认标签器 作为版本的构建部分嵌入到 AssemblyInfo
  • 元素的流体网格居中,无需在父级上设置硬宽度

    我想将元素的 网格 居中 当调整大小时 该元素会调整到自身居中 像这样
  • AngularJS 修剪模型中的前导零,而视图/输入值仍然保持不变?

    对于类型为数字的输入元素 当输入的数字具有前导零 例如 0000123456 时 模型将更新为 123456 而视图 输入仍保持相同的 0000123456 但是 如果我从数字切换到文本 一切都会按预期进行 我想要一个数字 因为它会显示移动
  • wix - 如何删除非空文件夹

    我已阅读该网站上存在此类问题的所有主题 但找不到我需要的内容 我有一个程序的两个版本 旧版本和新版本 在旧版本中我有文件夹 f1 在新版本中我没有这个文件夹f1 当新程序的安装程序检测到旧版本时 它会删除该旧版本 但不会删除文件夹 f1 如