I have a program A.exe
which is linked dynamically with a.dll
.
a.dll
is a 3rd party DLL that is linked with the /FIXED
option. I know this because its DLL Characteristics is 0 when I see it with dumpbin
.
When I start A.exe
from Explorer, nothing bad happens, and it seems the loader carefully rebases other DLLs.
But, when I want to start A.exe
from another program B.exe
, and use CreateProcess()
or ShellExecute()
, A.exe
is not opened and an error appears in Windows Event Viewer:
Critical Error: invalid base addr., GetlastError: 487.
I know the problem might be solved by using Rebase.exe
and rebasing all DLLs, but why is there no problem when I open A.exe
from Explorer? How can I resolve the problem programmatically in my code?
I don't have access to the DLL provider.