File 如何在C#.NET应用程序中卸载时删除文件夹?

File 如何在C#.NET应用程序中卸载时删除文件夹?,file,uninstallation,File,Uninstallation,我有一个名为“XYZ”的Windows.net应用程序,我在安装后使用我的应用程序时创建了一个名为“ABC”的自定义文件夹(文件夹可能位于应用程序路径以外的任何位置) 卸载应用程序时,所有文件夹都将被删除,但“ABC”文件夹仍保留在那里 如何删除位于应用程序路径以外的“ABC”文件夹?创建自定义安装程序,有关详细信息,请阅读此处 编辑 这里更好,示例在VB.NET中,但不难理解;) 据我所知,如果您使用安装程序安装应用程序&文件夹是由您的应用程序创建的&而不是由安装程序创建的,则它不会删除它 相

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

卸载应用程序时,所有文件夹都将被删除,但“ABC”文件夹仍保留在那里


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

创建自定义安装程序,有关详细信息,请阅读此处 编辑
这里更好,示例在VB.NET中,但不难理解;)

据我所知,如果您使用安装程序安装应用程序&文件夹是由您的应用程序创建的&而不是由安装程序创建的,则它不会删除它


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

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

  • 将新库(“CustomActions”)添加到安装项目中
  • 添加=>新项目=>安装程序类
  • 切换到代码视图并覆盖卸载方法
  • 代码:

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

     Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory("C:\\MyFiles", Microsoft.VisualBasic.FileIO.DeleteDirectoryOption.DeleteAllContents);
    
  • 将CustomActions项目的项目输出(主输出)添加到安装项目
  • 右键单击安装项目,然后单击查看=>自定义操作
  • 右键单击卸载=>添加自定义操作=>应用程序文件夹=>自定义操作的主输出

  • 注:这里有一个很好的例子。他们更详细地解释了这个例子。在这个答案中,一开始不明显的是,您必须在应用程序的项目中添加安装程序类模板,而不是在应用程序的安装项目中。基本上,安装项目从添加到安装项目中自定义操作的任何应用程序调用procs Install()和Uninstall()。我们的想法是重写这两个过程来注入代码来完成您的请求…

    是否可以从savedState[]集合中获取原始安装目录?我不想硬编码到我的应用程序的路径,我想让它尝试删除原始安装目录。尝试检查当前目录的结果是“C:\Windows\SysWOW64”目录:/
     Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory("C:\\MyFiles", Microsoft.VisualBasic.FileIO.DeleteDirectoryOption.DeleteAllContents);