Ja, wir haben auch die tausenden DevExpress-BPLs.
Vorab-Fazit: nein, geht nicht (einfach)
* ohne BPLs, alles in der EXE
* * hier wird zuerst die ganze Datei geladen und anschließend der Code ausgeührt, also garnicht möglich
* mit BPLs in der EXE auch nicht
* * denn Sie wird als Letztes ausgeführt, nachdem alle gelinkten BPLs geladen wurden, also nicht machbar
* wenn du es schaffst deine
BPL als erstes laden zu lassen
* * darfst dort natürlich keine anderen BPLs als Abhängigkeit haben (DevExpress,
RTL,
VCL, ...)
* * also schön
NonVCL ist wohl am Schnellsten, mit den wenigsten Abhängigkeiten
* * dann könntest du es schaffen, allerdings werden scheinbar die Units nicht sofort initialisiert,
sondern erst wenn sie von Anderen sie verwendet werden, aber du brauchst eine
Unit-Initialization, um dort deine Form zu erstellen und anzuzeigen.
Alternativen:
* ein Bootloader
* * also eine kleine EXE, die zuerst gestartet wird und den Splashscreen anzeigt, bis sie das große Programm erfolgreich gestartet hat
* nicht aus dem Netzwerk starten
Ich hab hier ein paar alte bzw. sehr langsame PC mit einem langsamen Netzwerk,
dort hatte ich mir mal eine Batch geschrieben, welche die Dateien runterläd, in ein lokales Verzeichnis.
statt
MeinProgramm.exe -Parameter ...
wird dann
MeinProgramm.local.cmd \\IRGENDWAS\FREIGABE\ -Parameter ...
verwendet,
welche auch noch paar Sekunden länger sichtbar ist, bis der Splashscreen/Ladefortschritsanzeige kommt.
Code:
@PROMPT @@$G$S
CD /D "%~dp0"
REM
REM example: "C:\MeinZeug\MeinProgramm.local.cmd" \\IRGENDWAS\FREIGABE\ -DIE -PARAMETER -WENN -VORHANDEN
@REM example as single-line command without batch: CMD /C "CD /D "C:\MeinZeug"&&TASKKILL /F /IM MeinProgramm.exe&&ECHO Temp\>xcopy_exclude.txt&&ECHO Backup>>xcopy_exclude.txt&&ECHO *.ini>>xcopy_exclude.txt&&XCOPY \\IRGENDWAS\FREIGABE\* .\ /D /S /E /H /R /C /G /K /Z /V /Y /EXCLUDE:xcopy_exclude.txt&&DEL xcopy_exclude.txt&&START "" /B MeinProgramm.exe -DIE -PARAMETER -WENN -VORHANDEN"
@SET ERR=0
@SET PROGRAM=MeinProgramm.exe
@ECHO.
@ECHO #Source: %~1
@ECHO #Local: %~dp0
@IF NOT EXIST "%~1\%PROGRAM%" ( ECHO source-directory does not exist && SET ERR=1 )
@IF NOT EXIST "%~dp0\%PROGRAM%" ( ECHO local-directory is not correct && SET ERR=2 )
@IF NOT %ERR% == 0 GOTO error
TASKKILL /F /IM "%PROGRAM%" 2>NUL
@TITLE Download FileUpdates from %~1
XCOPY "%~1\*" "%~dp0" /D /S /E /H /R /C /G /K /Z /V /Y /EXCLUDE:%~f0
@IF ERRORLEVEL 2 SET ERR=3
@TITLE Start %PROGRAM%
SHIFT /1
START "" /B "%PROGRAM%" %*
@IF ERRORLEVEL 9059 SET ERR=4
@IF NOT %ERR% == 0 GOTO error
@TIMEOUT /t 5
EXIT /B
:error
@TIMEOUT /t 300
EXIT %ERR%
*** COPY-ExcludeList ***
*.config
*.ini
Backup
Temp\
.7z
.zip