NSIS:如何检查我的安装中的* .dll是否在$ SYSDIR中?

时间:2009-11-09 09:07:21

标签: nsis

我想写一个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剧本并不熟悉。

3 个答案:

答案 0 :(得分:2)

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

另外,你是破坏用户计算机的一个错误(“已删除:C:\ Windows \ System32 \ user32.dll”)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

Windows XP(SP2?)及更新版本具有system32的文件保护功能,因此您无法覆盖那里的系统关键文件。

尽量远离那个。

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

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