【问题标题】:How to delete Folder at uninstallation in C#.NET application?如何在 C#.NET 应用程序中卸载时删除文件夹?
【发布时间】:2010-11-10 05:05:24
【问题描述】:

我有一个名为“XYZ”的window .net 应用程序,在安装后使用我的应用程序时,我创建了一个名为“ABC”的自定义文件夹(文件夹可能位于应用程序路径以外的任何位置)。

当我卸载应用程序时,所有文件夹都被删除,但“ABC”文件夹仍然存在。

如何删除位于应用程序路径以外的“ABC”文件夹?

【问题讨论】:

    标签: file uninstallation


    【解决方案1】:

    您必须为此使用自定义操作:

    1. 向安装项目添加新库(“CustomActions”)
    2. 添加 => 新项目 => 安装程序类
    3. 切换到代码视图并覆盖卸载方法

    代码:

    public override void Uninstall(IDictionary savedState)
    {
        base.Uninstall(savedState);
    
        // Delete folder here.
    }
    

    如果您不想编写自己的 DeleteFolder 方法,请添加对 Microsoft.VisualBasic 的引用:

     Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory("C:\\MyFiles", Microsoft.VisualBasic.FileIO.DeleteDirectoryOption.DeleteAllContents);
    
    1. 将 CustomActions 项目的项目输出(Primary Output)添加到设置项目中。
    2. 右键单击您的设置项目,然后单击查看 => 自定义操作
    3. 右键卸载 => 添加自定义操作 => 应用程序文件夹 => 自定义操作的主要输出

    注意:here 就是一个很好的例子。他们更详细地解释了这个例子。起初在这个答案中并不明显的是,您必须在应用程序的项目中添加安装程序类模板,而不是在应用程序的 SETUP 项目中。基本上,安装项目从添加到安装项目中的自定义操作的任何应用程序中调用 procs Install() 和 Uninstall()。我们的想法是覆盖这两个 proc 以注入代码来完成您的竞标...

    【讨论】:

    • 是否可以从 savedState[] 集合中获取原始安装目录?我不想将路径硬编码到我的应用程序中,我希望它尝试删除原始安装目录。尝试检查当前目录最终会出现在“C:\Windows\SysWOW64”目录中。 ://
    【解决方案2】:

    据我所知,如果您使用安装程序来安装应用程序并且该文件夹是由您的应用程序而不是安装程序创建的,那么它不会删除它。

    相反,您必须使用将在卸载时运行的自定义操作将其删除。或者创建一个自定义 C# 应用程序,该应用程序仅在卸载正在进行时运行,这将删除该文件夹。 (我假设您正在使用像 InstallShield 这样的专业安装程序)

    【讨论】:

      【解决方案3】:

      创建自定义安装程序,您可以在此处阅读以获取更多详细信息 编辑 这里更好link,示例在VB.NET中,但不难理解;)

      【讨论】:

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