【问题标题】:How to delete application folder on uninstall如何在卸载时删除应用程序文件夹
【发布时间】:2011-09-01 10:50:43
【问题描述】:
  1. 我在 VS 2010 中使用安装项目创建了一个安装程序。它将我的应用程序安装到程序文件夹中,比如说 XXX。我的应用程序进一步在 XXX 文件夹中创建了一些文件和文件夹。在卸载时,它会删除安装程序创建的所有内容,而我的应用程序创建的文件和文件夹仍保留在 XXX 中。

  2. 我编写了一些自定义代码来使用 installerclass 删除文件夹 (XXX),但当用户从控制面板卸载时不执行,而从我创建的安装程序卸载时成功执行。

【问题讨论】:

  • @Davide 我知道这不能回答您的问题,但您应该避免在应用程序安装文件夹中写入任何内容 - 没有适当权限的用户可能会导致您的应用程序失败。 (OTOH,我承认即使您写信给 AddData 或类似的东西,您的卸载问题仍然存在......)
  • 感谢 Davide 的建议,我会记住这一点的。

标签: c# windows-installer installation managedinstallerclass


【解决方案1】:

第一步是修改您的应用程序,使其将数据写入每个用户的位置,而不是应用程序文件夹。例如,您可以使用当前用户 AppData 目录中的自定义文件夹。这样可以避免与权限相关的问题。

要删除此文件夹,您确实可以使用自定义操作。如果它是在安装项目的卸载下添加的,它应该在控制面板和软件包卸载中运行。

尝试创建verbose uninstall log 并搜索您的自定义操作名称,看看会发生什么。

【讨论】:

    【解决方案2】:

    我认为您不应该为此编写任何自定义代码,如果您的所有文件都标记为临时文件而不是永久文件,这将由 MSI 引擎直接处理。

    使用文件夹、文件和安装项目本身的配置和属性,您将获得所需的内容,而无需编写代码。

    【讨论】:

    • 你能帮我为上述问题获得一些详细的解决方案吗?在我的情况下,我的应用程序也在运行时创建了几个文件,这导致从控制面板卸载 MSI 的过程不删除包含这些文件的文件夹。我的要求是卸载 MSI,所有与 wwwroot 文件夹一起存在的文件夹都应该被删除,并且 wwwroot 文件夹必须是干净的。你能帮我解决这个问题吗?
    • 我使用 powershell 脚本卸载 msi,现在在该代码中我调用以下 powershell 来帮助我删除文件夹中的所有文件夹:Remove-Item "C:\Temp\Fldr* " -Force -Recurse -ErrorAction SilentlyContinue 解决了问题。
    【解决方案3】:

    我的猜测是您用于删除文件的自定义操作已安排在 UI 部分。从控制面板开始卸载时,它会以最小 UI 模式运行,并且会跳过所有对话框。

    您的自定义操作必须安排在InstallExecute 表中。
    (要与 UAC 兼容,它必须 deferred 和 noimpersonate。但是您的应用程序本身与 UAC 不兼容,所以这并不重要。)

    【讨论】:

      【解决方案4】:

      不要这样做!首先,用户通常不喜欢在没有警告的情况下删除他们放在应用程序目录中的数据文件(他们可能只是因为他们想移动它而卸载它到不同的驱动器,例如)。如果需要,最好让最终用户手动删除它们。另外,如果用户不小心将程序安装在错误的目录(例如C:\WINDOWS),然后又去卸载它,可能会造成灾难性的后果。或者如果用户将他珍贵的色情视频隐藏在应用程序文件夹中怎么办?再说一遍,不要这样做!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-10
        • 2017-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-26
        • 2012-08-04
        • 2012-05-07
        相关资源
        最近更新 更多