【问题标题】:Is it safe to do "RmDir /r $INSTDIR" in NSIS?在 NSIS 中执行“RmDir /r $INSTDIR”是否安全?
【发布时间】:2023-03-29 04:46:01
【问题描述】:

我在 NSIS 的 RmDir 方法的文档中注意到了这个警告:

警告:使用 RMDir /r $INSTDIR 卸载程序不安全。虽然它 不太可能,用户可能会选择 安装到 Program Files 文件夹 所以这个命令将清除 整个 Program Files 文件夹,包括 其他无关的程序 使用卸载程序。

这让我很害怕,因为直到现在我还没有考虑过这种可能性,而且我的脚本中有确切的行。但是,当我通过将我的程序安装到包含预先存在的文件的预先存在的位置,然后在其中运行带有RmDir /r /REBOOTOK $INSTDIR 的卸载程序来测试是否会发生这种情况时,现有文件不会受到伤害。

这是一个过时的警告吗?我正在使用 NSIS v. 2.46。

谢谢

【问题讨论】:

    标签: installation nsis


    【解决方案1】:

    如果可以的话,RmDir /r 将删除整个目录树,因此它是“不安全的”。请参阅http://nsis.sourceforge.net/Uninstall_only_installed_files 了解仅删除您安装的文件的方法

    【讨论】:

    • 如果我要在 $INSTDIR 创建一个子文件夹并将我的所有程序数据放在那里,递归删除该子目录,然后在原始 $INSTDIR 上执行常规 RmDir 怎么办?
    • 嗯,这会有所帮助,但问题可能仍然存在。假设您的子文件夹名为 system32 并且用户安装到 %windir%,然后您将删除 %windir%\system32
    • 我想我会冒险在 INSTDIR 中创建一个名为: 的子目录...我认为这应该可行。
    • 代码示例似乎没有删除 $INSTDIR。我应该把目录留在那里,还是有一种安全的方法?
    • 这种只卸载已安装文件的方法太复杂了。我知道这是我的观点,我真的认为应该有一种更简单的方法来做到这一点。它太容易出错并且需要太多的代码行。
    【解决方案2】:

    如果目录为空,则没有 /r(递归)标志的目录上的 RMDir 将删除该目录。他们在某个时候添加了此功能,不确定何时。

    NSIS Scripting Reference - RMDir

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-18
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多