【问题标题】:Inno Setup [UninstallDelete] delete all except one folderInno Setup [UninstallDelete] 删除除一个文件夹外的所有文件夹
【发布时间】:2018-02-22 20:19:01
【问题描述】:

对于我的应用程序的安装和部署,我使用的是 Inno-Setup 5.5.4。我目前的安装结构如下:

    C:\MyApp
    C:\MyApp\app.exe
    C:\MyApp\FolderA
    C:\MyApp\FolderA\InstalledFile.txt
    C:\MyApp\FolderA\NewFile.txt
    C:\MyApp\FolderB
    C:\MyApp\FolderB\NewFile.txt
    ...
    C:\MyApp\FolderZ

卸载应用程序后,我想删除所有可能由应用程序创建的文件,但特定文件夹中的文件除外。 (即C:\MyApp\FolderA\NewFile.txt)。

我的第一次尝试是在 [UninstallDelete] 部分中为我要清理的每个文件夹设置一个条目。类似于以下内容:

    [UninstallDelete]
    Type: filesandordirs; Name: C:\MyApp\FolderB
    Type: filesandordirs; Name: C:\MyApp\FolderC
    ...
    Type: filesandordirs; Name: C:\MyApp\FolderZ

但是,我不喜欢这种解决方案,因为每次向应用程序添加新文件夹时,我都必须考虑修改安装程序。

第二种方法是仅在特定文件夹为空时删除它,然后设置要删除的应用程序的根文件夹。类似于以下内容:

     [UninstallDelete]
     Type: dirifempty; Name: C:\MyApp\FolderA
     Type: filesandordirs; Name: C:\MyApp\

这第二种方法行得通吗?有没有更合理的方法来实现这一点?

【问题讨论】:

    标签: installation inno-setup


    【解决方案1】:

    文件在被进程访问时不能被删除。寻找导致它的原因。 在开始删除文件夹之前退出所有将要删除的应用程序和服务。确保没有其他应用程序访问您要删除的文件(记事本、word 等)。有时最好在结束其他进程后等待几秒钟,然后再删除它们已使用的文件(也许其他人可以解释一下)。

    我曾经遇到过一个案例,我们找不到卸载程序无法删除文件的原因。很长一段时间后,我们发现正在运行的 apachemonitor.exe 正在访问一个日志文件,而我们之前没有终止该进程。找到阻塞进程可能非常困难,但尤其是当它始终是无法删除的同一个文件时,您应该更好地查找您安装和使用的进程,以便制作一个正常工作的卸载程序。

    如果您想删除文件夹中除特殊文件之外的所有文件,则应在卸载程序中使用 Pascal-Script。 函数参考 (http://www.jrsoftware.org/ishelp/index.php?topic=scriptfunctions) 在这里很有帮助。

    您可以使用FindFirstFindNextFindClose 来遍历目录。致电DelTree(DirName, true, true, true)DeleteFile 获取您要删除的所有项目。

    如果CurUninstallStep=usPostUninstall,则在CurUninstallStepChanged 事件中执行该代码。

    【讨论】:

    • 感谢您的回答,但这不是问题所在。我试图找出的是从应用程序文件夹中删除所有文件(不是安装的一部分)的最佳方法,除了我指定的文件。我正在寻找类似“删除我的应用程序文件夹下的所有剩余文件,除了文件夹 A”。
    【解决方案2】:

    另一种防止在卸载时删除文件的方法是 使用参数标志:

    uninsneveruninstall; 在 [文件] 部分中

    帮助信息:

    uninsneveruninstall
    

    永远不要删除文件。这个标志在安装时很有用 在任何情况下都不应删除的常见共享文件, 例如 MFC DLL。

    注意:如果此标志与 sharedfile 标志结合使用,卸载时文件将永远不会被删除,但引用计数仍会适当减少。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多