Unresolved symbols in MSVCRT.DLL when running a py2exe packag ed program.

Rolander, Dan Dan.Rolander at marriott.com
Fri Mar 2 19:23:52 CET 2001

The problem with replacing individual DLLs is that they come in matched
sets. Unless you replace the whole set bad things can happen. It is often
easiest to install a service pack or product that'll upgrade the DLLs for
you. Or if you do use a professional installer like IPWI, load a merge
module to handle it for you.

This is an excellent article from Microsoft which explains the DLL Hell
pitfalls and how Win2K is attempting to handle it (along with a
troubleshooting tool for all Win32 systems): 


-----Original Message-----
From: Tim Peters [mailto:tim.one at home.com]
Sent: Friday, March 02, 2001 1:10 PM
To: python-list at python.org
Subject: RE: Unresolved symbols in MSVCRT.DLL when running a py2exe
packaged program.

> I disagree.
> You can distribute system dll's.  You are expected to, and sometimes you
> have to.  You must insure that the version you load is at least
> equal to the version that you linked against.
> I have done this (distribute system DLL's) on all windows except WinME and
> the 16bit ones.  Unfortunately I can't say how I did it precisely, because
> I just used InstallShield.

And Python just uses the Wise installer.  They aren't that fancy under the
covers, though -- they just "follow the rules", checking version numbers,
bumping refcounts on refcounted DLLs, and arranging for a reboot if they
to replace something.  But that stuff is ineffective on the newer systems
with SFP.

> But I believe that, where SFP exists, you must use specific and new
> API's to replace DLL's, otherwise the system will back out your changes.

My understanding is that SFP isn't so easily fooled; e.g.,



SFP won't allow replacement of protected files via just using API tricks; it
also sucks in a digital signature scheme, and only MS can supply signatures
that work.

> One solution is to specify the changes in an .INF file and let the system
> worry about these details (but this has its limitations).
> I assume that Python itself updates the MSVCRT.dll.

The PythonLabs Windows installer tries to, yes.

> Might look at how it does it on Win2K.

My understanding is that it can't (but Win2K ships with a "good enough" set
of DLLs, so the version check shouldn't trigger there -- yet).

BTW, I'm *glad* MS is doing SFP!  Whatever Windows Life may be in theory,
DLLs in practice cannot be mixed and matched -- you need a self-consistent
set else Very Strange Things Happen.  And with about 1,000 DLLs under a
typical Windows system directory, that's just impossible for app developers
to keep straight.  May well be impossible for MS to keep straight too, but
least it's no longer impossible for them to *try* to keep 'em straight now.

something-to-ponder-each-time-your-win9x-crashes-ly y'rs  - tim


More information about the Python-list mailing list