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

发布于 2024-08-10 00:00:28 字数 459 浏览 5 评论 0原文

我想编写一个 NSIS 脚本,我们现在将其称为 setup.nsi,然后检查 如果 $SYSDIR 中已存在多个必需的 dll 文件

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

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

IfFileExists $SYSDIR\blabla.dll +2 +1

然后它检查 blabla.dll 是否在 $SYSDIR 中..但是如果我想知道 setup.nsi 中的 *.dll 是否复制了文件(即我有兴趣安装的 *.dll ......并且它们它们很多..所以我不能只检查 $SYSDIR 中是否存在所有名称

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

请耐心等待我,因为我对 NSIS 脚本非常陌生。

I wanted to write an NSIS script, let's call it for now setup.nsi, and check
if several required dll files already exists in $SYSDIR

Let me emphasize on the word "several"

What I understand from nsis IfFileExists documentation is that if I type in:

IfFileExists $SYSDIR\blabla.dll +2 +1

then it checks if blabla.dll is in $SYSDIR .. but what if I want to know if *.dll from where setup.nsi copies the file (i.e. the *.dll's that I am interested in installing in.. and they are a lot of them.. so I can't just go around checking for all the names) exists in $SYSDIR

During uninstallation I want to then be able to delete them from $SYSDIR (using some uninstall.log to see if I really copied them in $SYSDIR.. and again the wildcard question).

Please be patient with me as I am really new to NSIS scripts.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

还给你自由 2024-08-17 00:00:28

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

另外,您只差一个拼写错误就会破坏用户的计算机(“已删除:C:\Windows\System32\user32.dll”)。

Is it REALLY necessary to write and delete in $SYSDIR ? Unless yours is a system file, there's no reason for it to be in $__SYS__DIR. If you need to use a specific version of a library, consider DLL redirection (put your DLL in your app dir and use the .local feature) - see the MSDN article on DLL redirection and Side-by-side assemblies.

Plus, you are one typo away from wrecking the user's computer ("Deleted: C:\Windows\System32\user32.dll").

路弥 2024-08-17 00:00:28

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

As Piskvor mentions, I don't think you should be worrying about deleting system DLLs in the uninstaller. In case you want to overwrite system DLLs with an updated version, you may want to look at the SetOverwrite command. It lets you overwrite files if what you've got is newer.

荆棘i 2024-08-17 00:00:28

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

请尽量远离这一点。

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

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

Windows XP (SP2?) and up has file protection for system32, so you can't overwrite system critical files in there.

Do try to stay away from that.

Also, to check for your file specifically, see if there's a plugin for NSIS that can calculate checksums and compare that on uninstall. That's probably the safest, IF you really need to do it.

I'd suggest install files somewhere else and add that to PATH.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文