1
votes

I've opened up my program in Dependency Walker. It shows the following DLLs:

  • GDI32.DLL
  • OLEAUT32.DLL
  • IMM32.DLL
  • WINMM.DLL
  • KERNEL32.DLL
  • USER32.DLL
  • SHELL32.DLL
  • OLE32.DLL
  • ADVAPI32.DLL
  • WS2_32.DLL
  • MSVCP100.DLL
  • MSVCR100.DLL

So I'm guessing half of those are part of Windows and the other half is part of C++, right? What is the best method to find out which are part of the OS and which aren't?

4
I doubt there really is an answer here -- a DLL is just a collection of functions. It's entirely up to us, after the fact, to classify some of those as Part of X vs. part of Y.Jerry Coffin
So I'm out of luck? I'm trying to package the required DLLs into the one folder. I can't use an installer because the target machine requires that installers are not used. I can't use the -MT flag because it uses the Qt libraries.user87504
That is what I'm using to get the list of DLLs. That is Dependency Walker.user87504
Microsoft includes a list of redistributables. That's you're guide to what you can/can't include with your application. For most things, vc_redist.exe is the main thing to include.Jerry Coffin
If you persist in this no installers stance, updates to Windows DLLs have a decent chance of breaking your install. The installer database(s) help keep track of what app relies on what DLL and with no info about your app things could easily break. Look into the side-by-side DLL concept...JimR

4 Answers

2
votes

Don't package up any DLLs that you didn't explicitly add into the project yourself.

Read the documentation for your toolchain (Visual Studio, or whatever) to find out if there are any redistributables that you need to include in your package. Those may include some DLLs.

If you are not allowed to publish an installer (the form of which is generally taken by said redistributables for Microsoft products), then you shall not simply manually dump DLLs instead. You shall remark in your release notes that those dependencies must already be installed on the target system. You make them a pre-requisite for your application.

1
votes

MSVCP100.dll and MSVCR100.dll contain the runtime libraries for C and C++. Everything else in the list belongs to windows. One way to determine if a DLL belongs to windows is to look at it's path (c:\windows...) and then check for a digital signature from MS. It's not foolproof but it'll get you a bit closer to determining if the DLL belongs to windows or not.

Edit: See this answer by Lightness Races In Orbit concerning distributing Windows DLL's

0
votes

Other than looking them up using Google, there's probably no easy way to tell. However, in this case I can tell you that MSVCP100.DLL is the C++ standard library code, and MSVCR100.DLL is the C runtime library.

0
votes

Dependency Walker itself has list of 'known system DLLs'. You can find it in Options -> Configure Module Search Order menu.