【问题标题】:NSIS: How to check whether *.dll from my installation is in $SYSDIR?NSIS:如何检查我安装的 *.dll 是否在 $SYSDIR 中?
【发布时间】:2009-11-09 09:07:20
【问题描述】:

我想写一个 NSIS 脚本,我们暂时称它为 setup.nsi,然后检查 如果 $SYSDIR 中已经存在多个所需的 dll 文件

让我强调一下“几个”这个词

我从 nsis IfFileExists 文档中了解到,如果我输入:

IfFileExists $SYSDIR\blabla.dll +2 +1

然后它会检查 blabla.dll 是否在 $SYSDIR 中......但是如果我想知道 *.dll 是否从 setup.nsi 复制文件的位置(即我有兴趣安装的 *.dll ......而且他们很多..所以我不能到处检查所有的名字)存在于$SYSDIR中

在卸载过程中,我希望能够从 $SYSDIR 中删除它们(使用一些 uninstall.log 来查看我是否真的将它们复制到 $SYSDIR.. 以及通配符问题)。

请耐心等待,因为我是 NSIS 脚本的新手。

【问题讨论】:

    标签: nsis


    【解决方案1】:

    真的有必要在$SYSDIR 中写和删除吗?除非你的文件是 system 文件,否则没有理由将它放在 $__SYS__DIR 中。如果您需要使用特定版本的库,请考虑 DLL 重定向(将您的 DLL 放在您的应用程序目录中并使用 .local 功能) - 请参阅 the MSDN article on DLL redirectionSide-by-side assemblies

    另外,您只需一个错字就可以破坏用户的计算机(“已删除:C:\Windows\System32\user32.dll”)。

    【讨论】:

    • +1 - 我不会尝试通配符删除 SYSDIR 中的 DLL。除非有必要,否则我也会将它们保存在您的应用程序目录中。
    【解决方案2】:

    正如 Piskvor 所提到的,我认为您不必担心在卸载程序中删除系统 DLL。如果您想用更新的版本覆盖系统 DLL,您可能需要查看SetOverwrite 命令。如果您拥有较新的文件,它可以让您覆盖文件。

    【讨论】:

      【解决方案3】:

      Windows XP (SP2?) 及更高版本具有针对 system32 的文件保护,因此您无法覆盖其中的系统关键文件。

      请尽量远离它。

      另外,要专门检查您的文件,请查看是否有 NSIS 插件可以计算校验和并在卸载时进行比较。如果您真的需要这样做,那可能是最安全的。

      我建议在其他地方安装文件并将其添加到 PATH。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-09
        • 1970-01-01
        相关资源
        最近更新 更多