我已经在 Dependency Walker 中打开了我的程序。它显示了以下 DLL:
- GDI32.DLL
- OLEAUT32.DLL
- IMM32.DLL
- WINMM.DLL
- 内核32.DLL
- USER32.DLL
- SHELL32.DLL
- OLE32.DLL
- ADVAPI32.DLL
- WS2_32.DLL
- MSVCP100.DLL
- MSVCR100.DLL
所以我猜其中一半是 Windows 的一部分,另一半是 C++ 的一部分,对吧?找出哪些是操作系统的一部分而哪些不是的最佳方法是什么?
我已经在 Dependency Walker 中打开了我的程序。它显示了以下 DLL:
所以我猜其中一半是 Windows 的一部分,另一半是 C++ 的一部分,对吧?找出哪些是操作系统的一部分而哪些不是的最佳方法是什么?
不要打包您自己未明确添加到项目中的任何DLL。
阅读您的工具链(Visual Studio 或其他)的文档,了解您的包中是否需要包含任何可再发行组件。这些可能包括一些 DLL。
如果您不允许发布安装程序(微软产品的上述可再发行组件通常采用这种形式),那么您不应简单地手动转储 DLL。您应在发行说明中注明这些依赖项必须已安装在目标系统上。您使它们成为您的应用程序的先决条件。
MSVCP100.dll 和 MSVCR100.dll 包含 C 和 C++ 的运行时库。列表中的其他所有内容都属于 Windows。确定 DLL 是否属于 Windows 的一种方法是查看它的路径 (c:\windows...),然后检查来自 MS 的数字签名。这不是万无一失的,但它会让您更接近确定 DLL 是否属于 Windows。
编辑:请参阅Lightness Races In Orbit 关于分发 Windows DLL 的答案
除了使用谷歌查找它们之外,可能没有简单的方法来判断。但是,在这种情况下,我可以告诉您这MSVCP100.DLL
是 C++ 标准库代码,并且MSVCR100.DLL
是 C 运行时库。
Dependency Walker 本身具有“已知系统 DLL”列表。您可以在选项 -> 配置模块搜索顺序菜单中找到它。