0

我想写一个 NSIS 脚本,我们暂时称它为 setup.nsi,并检查 $SYSDIR 中是否已经存在几个所需的 dll 文件

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

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

IfFileExists $SYSDIR\blabla.dll +2 +1

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

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

请耐心等待我,因为我对 NSIS 脚本真的很陌生。

4

3 回答 3

2

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

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

于 2009-11-09T09:25:53.630 回答
0

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

于 2009-12-23T22:02:17.973 回答
0

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

尽量远离那个。

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

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

于 2009-12-23T22:09:34.700 回答