Click here for information on how to determine which DLLs are required by your program
Thinstall is able to link Load DLL and OCX files from the Virtual Filesystem without extracting them to disk.
Applications can load DLL and OCX several different ways:
Implicitly loaded DLLs
Implicitly linked Dlls used by your program are those listed in a program's EXE Import Table. The import table is consulted by the normal windows loader to resolve DLL references before your program loads. When you add a DLL to your package file, Thinstall will automatically remove it from the starting EXE's import table so that the DLL is loaded by Thinstall instead of windows.
Implicitly linked DLLs may contain a thread local storage section, while dynamically loaded DLLs cannot. Thinstall simulates the thread local storage activities of the operating system for implicitly loaded DLLs. This allows DLLs using thread local storage to work correctly even though they may be loaded later in the program's execution.
Dynamically loaded DLLs
Dlls loaded explicitly by the application atruntime are refered to as "Dynamically loaded DLLs". These DLLs will be loaded through a call to LoadLibrary, or use of an COM/ActiveX control that causes the DLL to be loaded sometime after the program starts. Thinstall is able to load these DLLs from its archive by intercepting calls to the system and using its own loader instead of the systems.
DLLs loaded as dependencies of other DLLs
Dlls your program uses may refer to other DLL dependencies. Dependency DLLs are always loaded before the DllMain function of the original DLL is called. Thinstall automatically loads dependency DLLs from the virtual archive if they exists at the correct virtual path or have the proper DLL search order.
Dlls loaded through COM / ActiveX
When you create an ActiveX object, Thinstall will search the virtual and system registries for the correct class-id, located the associated DLL/OCX, and then load the associated DLL. If the registry key refers to a path location that matches the virtual path of one of your project DLL files, the DLL is loaded from your archive. If the registry key refers to a filename that matches a DLL on the system hard drive, the normal operating system is used to load the DLL.
More information
Controlling the Search Order for DLLs Main entry/callbacks
Thinstall calls DllMain callbacks for
DLL_PROCESS_ATTACH, DLL_THREAD_ATTACH, DLL_THREAD_DETACH, DLL_PROCESS_DETACH
exactly as windows would, so there is no discernable difference to a DLL that is loaded by Thinstall and one that is loaded by Windows.
Memory Allocation and relocation
Thinstall tries to load a DLL at its desired memory base address. If this memory address is already allocated, Thinstall relocates the DLL to another location in memory, patching it using its internal relocation information. Thinstall uses a top-down memory allocation scheme, where the highest available memory address is allocated. Memory for a DLL's code and data sections is automatically freed by Thinstall when a call to FreeLibrary is made, or when the program quits.
DLL Dependencies
When Thinstall loads a DLL, it will check for dependencies on other DLLs and load them if needed. When a DLL is freed by Thinstall, all dependant DLLs will also be freed if their reference count is zero.