Konwertuj dll do exe

Konwertuj DLL na EXE

Zbuduj hosta EXE dla biblioteki DLL, gdy launcher lub urządzenie nie może bezpośrednio ładować bibliotek.

Jak konwertować dll do exe

Program uruchamiający, system wdrażania lub urządzenie może akceptować wyłącznie program Windows, nawet gdy dostępny komponent jest plikiem DLL. Praktycznym rozwiązaniem jest zazwyczaj utworzenie hosta EXE wywołującego bibliotekę DLL, a nie zmiana nazwy pliku lub jego mechaniczna konwersja.

Czym jest format DLL

DLL (Dynamic Link Library) to plik Windows Portable Executable (PE) zawierający skompilowany kod, dane lub zasoby ładowane przez inny proces. Aplikacje używają plików DLL do współdzielonych funkcji, plug-inów, kodeków, dostawców baz danych, sterowników, komponentów COM oraz zestawów .NET.

Visual Studio, .NET SDK, MinGW, Delphi i inne toolchainy tworzą pliki DLL. Zwykły plik DLL jest przeznaczony do załadowania przez inny program i udostępnia funkcje lub klasy zarządzane; zazwyczaj nie zapewnia punktu wejścia procesu, interfejsu użytkownika ani zachowania startowego oczekiwanego od pliku EXE.

Czym jest format EXE

EXE to plik PE przeznaczony do uruchamiania jako proces Windows. Jego nagłówek identyfikuje podsystem wykonywalny i punkt wejścia, a plik może zawierać program konsolowy, aplikację graficzną, instalator lub usługę. Plik EXE nadal może zależeć od oryginalnego pliku DLL i innych plików runtime, więc nie jest automatycznie samodzielny.

Jak utworzyć hosta wykonywalnego

Gdy dostępny jest kod źródłowy

  1. Ustal, czy biblioteka jest natywnym C++, zarządzanym .NET czy innym outputem kompilatora; host musi używać zgodnego interfejsu i architektury.
  2. W Visual Studio utwórz Console App lub Windows App za pomocą File → New → Project.
  3. Dodaj projekt biblioteki za pomocą Project → Add Project Reference. W przypadku zarządzanego pliku binarnego bez jego projektu dodaj assembly jako referencję i skonfiguruj jego ścieżkę w projekcie.
  4. Zaimplementuj punkt wejścia hosta: main lub WinMain dla natywnego C++, albo Program.cs i Main dla aplikacji .NET. Przeanalizuj argumenty, zainicjalizuj wymagane ustawienia, wywołaj publiczne API biblioteki i zwróć odpowiedni kod wyjścia.
  5. Zbuduj projekt za pomocą Build → Build Solution. Visual Studio zwykle zapisuje plik EXE w katalogu konfiguracji, takim jak bin\Release.

W przypadku zarządzanej biblioteki .NET CLI może utworzyć i opublikować hosta:

dotnet new console -n DllHost
dotnet add DllHost reference ..\Library\Library.csproj
dotnet publish DllHost -c Release -r win-x64 --self-contained true

Opublikowane pliki pojawią się w katalogu DllHost\bin\Release\<target-framework>\win-x64\publish. W razie potrzeby zastąp target framework i runtime identifier. --self-contained true dołącza runtime .NET, ale nie gwarantuje utworzenia jednego fizycznego pliku ani usunięcia zależności natywnych.

Gdy dostępny jest wyłącznie zarządzany plik DLL .NET

Użyj ILSpy, aby sprawdzić assembly, jego typy publiczne, referencjonowane assembly, target framework oraz wywoływalne metody. Utwórz hosta C#, który będzie odwoływał się do pliku DLL i wywoływał udokumentowaną metodę publiczną. ILSpy może dekompilować kod na potrzeby analizy, ale zaciemnianie kodu, brakujące zależności, kod niebezpieczny i ograniczenia licencyjne mogą uniemożliwić działającą rekonstrukcję; używaj kodu tylko wtedy, gdy masz na to zgodę.

Aby utworzyć wdrożenie .NET w postaci pojedynczego pliku, ustaw PublishSingleFile na true i opublikuj aplikację dla konkretnego runtime, takiego jak win-x64. Zależności natywne nadal mogą być wypakowywane w runtime, a ten proces nie konwertuje natywnego pliku DLL na kod zarządzany.

Gdy dostępny jest wyłącznie natywny plik DLL

Utwórz hosta C++ w Visual Studio lub innym zgodnym toolchainie. Połącz go z import library pliku DLL albo załaduj ją w runtime za pomocą LoadLibrary i pobierz funkcje przy użyciu GetProcAddress. Musisz znać nazwę każdej eksportowanej funkcji, typy parametrów, układ struktur, calling convention, zasady własności oraz wymaganą sekwencję inicjalizacji. Metody klas C++ zasadniczo nie są stabilnym interfejsem DLL, chyba że biblioteka dokumentuje zgodne ABI; łatwiejsze do wywołania jest API eksportowane w stylu C.

rundll32.exe example.dll,ExportedFunction nie jest konwerterem. Działa wyłącznie z eksportami zgodnymi z ograniczoną sygnaturą callback oczekiwaną przez rundll32 i nie nadaje się do dowolnych funkcji, metod C++ ani bibliotek wymagających niestandardowych argumentów lub inicjalizacji.

Ograniczenia zgodności i konwersji

  • Zmiana nazwy library.dll na program.exe zmienia wyłącznie rozszerzenie nazwy pliku. Nie dodaje punktu wejścia wykonywalnego ani nie zmienia metadanych PE.
  • Plik DLL może być plug-inem przeznaczonym dla jednego konkretnego hosta, nie udostępniać użytecznego publicznego API, wymagać konfiguracji lub stanu rejestru albo zależeć od dodatkowych plików DLL, sterowników, rejestracji COM lub runtime Visual C++/.NET. Wrapper nie może zastąpić tych wymagań.
  • Dopasuj architekturę procesu i biblioteki: host x86 wymaga pliku DLL x86, natomiast host x64 wymaga pliku DLL x64. Proces 32-bitowy nie może załadować pliku DLL 64-bitowego.
  • Zarządzane assembly .NET i natywne pliki DLL wymagają różnych narzędzi. ILSpy służy do zarządzanych assembly; pliki binarne natywne zwykle wymagają kodu źródłowego, SDK, dokumentacji eksportów, zgodnych nagłówków i zgodnego kompilatora. Narzędzia takie jak dumpbin /exports z Visual Studio mogą sprawdzać natywne eksporty, ale nie potrafią ustalić typów ich parametrów.
  • Nie istnieje renomowany konwerter online ogólnego przeznaczenia, który zamienia dowolny plik DLL w funkcjonalny plik EXE. Usługi konwersji plików online nie mogą utworzyć punktu wejścia ani wrappera, a także mogą ujawnić zastrzeżone lub niebezpieczne pliki binarne; wykonuj tę pracę lokalnie za pomocą Visual Studio, .NET SDK lub ILSpy.

Krótko mówiąc, nie da się bezpośrednio przekonwertować DLL na EXE.
Dlatego nie istnieje tak zwany konwerter dll na exe ani darmowe narzędzie online do konwersji .dll na .exe.

Porównanie formatu DLL z EXE

Jak formaty DLL i EXE wypadają w porównaniu pod względem najważniejszych cech dla tej konwersji.

Porównanie formatów plików DLL i EXE
Cecha .DLL Dynamic-Link Library .EXE Portable Executable
Otwarty standard Nie Nie
Kompresja Bez kompresji Bez kompresji
Typowy rozmiar pliku Średni Duży
Otwiera się w przeglądarce internetowej Nie Nie
Dalsza edycja Nie do bezpośredniej edycji Nie do bezpośredniej edycji
Obsługa metadanych Podstawowy Rozbudowany
Czytelny tekstowo Nie Nie
Najlepszy do Osadzanie w aplikacjach Osadzanie w aplikacjach
Wprowadzono 1993 1993
Twórca Microsoft Microsoft