Projekt

Allgemein

Profil

105 Prodat Lokales Start Script (RunLocal) » Historie » Version 42

[E] Andre K, 08.10.2026 14:31

1 3 [E] Rocco Kreutz
h1. Einrichtung "Prodat lokal starten"
2 1 [X] Daniel S
3 5 [X] Daniel S
{{toc}}
4
5 39 [X] Daniel S
h2. Config.Servers:
6 30 [X] Daniel S
7 39 [X] Daniel S
eintragen: (ganz oben als erstes)
8 35 [X] Daniel S
9 36 [X] Daniel S
<pre><code class="ini">
10 1 [X] Daniel S
[RunLocal]
11 35 [X] Daniel S
AllowInstall=True 
12 36 [X] Daniel S
</code></pre>
13 30 [X] Daniel S
14 32 [X] Daniel S
!clipboard-202506050914-3ejh7.png!
15 30 [X] Daniel S
16 42 [E] Andre K
* Hinweis:
17
** Die Einstellung @AllowInstall=True@ stammt aus einer älteren Beschreibung.
18
** Die Aktivierung des Buttons *@Lokal installieren@* erfolgt im aktuellen Ablauf nicht mehr ausschließlich über @AllowInstall@.
19
** Maßgeblich ist aktuell vor allem, ob PRODAT lokal oder remote gestartet wurde bzw. ob ein Dev-/Debug-Fall vorliegt.
20
** Die bestehende Dokumentation zu @AllowInstall@ und @ForceAllowInstall@ ist deshalb nur noch eingeschränkt aktuell und sollte als Altverhalten betrachtet werden.
21
22 33 [X] Daniel S
h2. RunLocal
23
24
* RunLocal erlaubt aus dem (Prodat) Login-Dialog heraus eine "RunLocal Installation"
25
** {{collapse(Aufklappen)
26
!clipboard-202503251606-cwjr4.png!
27
&nbsp;
28
!clipboard-202503251630-0azh4.png!
29
&nbsp;
30
!clipboard-202503251630-k6yt1.png!
31
&nbsp;
32
}} 
33
** "Hilfe":https://redmine.prodat-sql.de/projects/prodat-v12-public/wiki/105_Prodat_Lokales_Start_Script_(RunLocal)
34
* AllowInstall:
35
** Sofern nicht innerhalb einer RDP-Session (Remote-Session)
36
** Sofern kein C:\ProdatERP existiert
37
** Sofern AllowInstall= True
38
** => Aktiviere Button
39
* ForceAllowInstall:
40
** Sofern ForceAllowInstall=True, aktiviere Button, egal welche anderen Umständer/Flags gesetzt sind
41
42 42 [E] Andre K
* Aktueller Hinweis:
43
** Der Button *@Lokal installieren@* startet technisch @ProdatRunLocal.exe@ mit einem Silent-Install-Parameter.
44
** Die eigentliche Installation und Aktualisierung erfolgt danach über den bestehenden RunLocal-/Batch-Ablauf.
45
46 36 [X] Daniel S
Sonderfall: zB auf RDP testen:
47 33 [X] Daniel S
<pre><code class="ini">
48
[RunLocal]
49 37 [X] Daniel S
AllowInstall=True
50 40 [X] Daniel S
--ForceAllowInstall=True
51 33 [X] Daniel S
</code></pre>
52
53 11 [X] Daniel S
Herkunft ##16585 *Video* hier in Anhängen: > https://redmine.prodat-sql.de/attachments/23547
54 5 [X] Daniel S
55
h2. Hintergründe
56 9 [E] Rocco Kreutz
57 1 [X] Daniel S
Prodat über VPN oder bei langsamen WLan zu starten, dauert zu lange. Hintergrund ist, dass ~1GB an Bibliotheken geladen werden.
58 21 [E] Rocco Kreutz
59 1 [X] Daniel S
h3. Standard-Installation
60 27 [E] Rocco Kreutz
* Das Einrichtungs-Setup bietet 2 automatische Einrichtungen mit Standardwerten an
61 1 [X] Daniel S
** *Variante 1 Standard* : benutzt die folgenden Werte für die Konfiguration und das lokale Verzeichnis und führt die einzelnen Menu-Optionen des Setup als 'Programm' aus
62
*** @\\Server\ProdatShare\RunLocal_Setup.bat@ starten und 1 drücken
63
*** lokales Verzeichnis: *C:\ProdatERP\*
64 42 [E] Andre K
*** Programm: *ProdatERP.exe*
65 1 [X] Daniel S
*** Parameter: <keine Parameter>
66 21 [E] Rocco Kreutz
*** Quelle: Verzeichniss der RunLocal_Setup.bat (ohne \Administration\RunLocal\) welche ausgeführt wird
67 27 [E] Rocco Kreutz
** Variante 2 BDE : benutzt die folgenden Werte für die Konfiguration und das lokale Verzeichnis und führt die einzelnen Menu-Optionen des Setup als 'Programm' aus
68 1 [X] Daniel S
*** @\\Server\ProdatShare\RunLocal_Setup.bat@ starten und 2 drücken
69
*** lokales Verzeichnis: *C:\ProdatERP\*
70 42 [E] Andre K
*** Programm: *ProdatERP.exe*
71 1 [X] Daniel S
*** Parameter: *-REMEMBER_SERVER 1 -L -U "BDE" -M 11 -UniqueName PRODAT-BDE-UNIQUEHANDLE*
72 21 [E] Rocco Kreutz
*** Quelle: Verzeichniss der RunLocal_Setup.bat (ohne \Administration\RunLocal\) welche ausgeführt wird
73
* Ausserdem können beide Standard-Installationen ohne Benutzer-Interaktion mittels Parameter ausgeführt werden:
74
** @\\Server\ProdatShare\RunLocal_Setup.bat SILENT_INSTALL_DEFAULT@
75
** @\\Server\ProdatShare\RunLocal_Setup.bat SILENT_INSTALL_DEFAULTBDE@
76
* Die Installation führt dabei eine *Synchronisierung* des lokalen Ordners mit dem Remote(Server)-Ordner aus !!!
77
** Lokale Dateien und Ordner welche nicht auf der Remote-Seite existieren, werden glöscht
78
** Nachfolgende Update ziehen nur noch neuere Dateien vom Server
79
80 1 [X] Daniel S
h3. Erläuterung
81 21 [E] Rocco Kreutz
* Prodat wird aus einem zentralen Verzeichnis im Netzwerk in ein lokales Verzeichnis kopiert
82
* In diesem lokalen Verzeichnis wird eine Konfigurations-Datei angelegt (..\Administration\RunLocal\SetCfgVariables.bat) welche folgende Werte enthält
83 42 [E] Andre K
** Programm (Default ist ProdatERP.exe)
84 21 [E] Rocco Kreutz
** Parameter (Default ist -REMEMBER_SERVER:1)
85
** Quelle (Default ist der Pfad in dem RunLocal_Setup.bat liegt (ohne \Administration\RunLocal\), welches gestartet wird - diese und die anderen zugehörigen reinen Setup-Batch-Scripte sind von der Synchronisierung aussgeschlossen)
86 42 [E] Andre K
** Remote-Pfad als @VarCfg_RemoteDir@
87 21 [E] Rocco Kreutz
* Desweiteren werden eine Batch für das manuelle Aktualisieren mittels eines Shortcuts auf dem Desktop angelegt (..\Administration\RunLocal\RunLocal_Setup_Shortcut.bat)
88 24 [E] Rocco Kreutz
* Sowie eine Batch welche mittels der Windows-Aufgabenverwaltung täglich um 23 Uhr gestartet wird - dieses ruft das Batch-Script für den Shortcut auf - Working-Path Problem beim Einrichten von Windows-Tasks mittels SCHTASKS.exe (..\Administration\RunLocal\RunLocal_WinTaskScript.bat)
89 26 [E] Rocco Kreutz
* ProdatRunLocal.exe, welche das eigentliche Batch-Script startet
90
** Um zu vermeiden, dass Benutzer in der Lage sind das Batch-Script anzuhalten indem in das Console-Fenster geklickt wird
91 21 [E] Rocco Kreutz
** !clipboard-202503251641-u5n9c.png!
92 9 [E] Rocco Kreutz
** !clipboard-202503251641-erjh5.png!
93 41 [E] Rocco Kreutz
* Beide Batch-Scripte terminieren alle Programm-Instanzen, aktualisieren das lokale Prodat und starten das Programm neu
94
95
h3. Updating Mechanics
96
97
h4. `CheckAndUpdateProdatRunLocal` in ProdatERP.exe - behavior summary
98
99
* Detects whether Prodat is running from the local `C:\` installation or from the remote/location copy by checking `ParamStr(0)`.
100
* Reads the configured remote directory from `Administration\RunLocal_SetCfgVariables.bat` by parsing `SET VarCfg_RemoteDir=...`.
101
* Checks whether the remote marker file is accessible by calling `ProdatRunLocal_SafeCheck.exe`.
102
** If the remote marker cannot be reached, the method stops without updating anything.
103
** If it can be reached, the marker content is read as Base64 and also decoded for logging/debugging.
104
* Compares local and remote marker state.
105
** If the local marker file is missing, the local installation is treated as out of sync.
106
** If the local marker can be read, it compares:
107
*** marker file content
108
*** last-write timestamp
109
* If local and remote are already in sync, nothing is updated.
110
* If the local copy is out of sync:
111
** It first verifies that the configured remote path matches the location from which Prodat was actually started.
112
** If the paths do not match, it shows a confirmation message and cancels the update.
113
** If the paths match, it copies the remote `ProdatRunLocal.exe` to the local `ProdatRunLocal.exe` with retry logic.
114
** After the copy attempt, it starts the local sync binary via `ShellExecute`, using the binary’s own directory as working directory.
115
* The method is heavily logged at info/error/debug level for:
116
** execution mode detection
117
** resolved paths
118 1 [X] Daniel S
** remote accessibility
119
** marker comparison results
120
** copy success/failure
121
** final exit
122
123 42 [E] Andre K
* Ergänzung:
124
** Für die Update-Entscheidung der lokalen Installation wird @Prodat.INSTALL.MARKER@ verwendet.
125
** Verglichen werden:
126
*** Inhalt der Marker-Datei
127
*** Last-Write-Zeitstempel der Marker-Datei
128
** Der Marker wird serverseitig erzeugt und in die installierte Struktur übernommen.
129
130 41 [E] Rocco Kreutz
h4. `ProdatRunLocal.exe` summary
131
132
* On startup it performs its own self-update check via `USelfUpdate.CheckAndPerformUpdate`.
133
* It compares local and remote `ProdatRunLocal.exe` by:
134
** file size
135
** last-write timestamp
136
* If local and remote are identical, nothing happens.
137
* If they differ:
138
** a `_update.exe` variant is written locally
139
** the updater starts the updated executable with the original command line
140 1 [X] Daniel S
** the current process terminates after launching the new one
141
* There is also a special `_update.exe` startup mode:
142
** `_update.exe` replaces the original `.exe`
143
** then relaunches the original executable
144
* The startup splash screen triggers this update flow before starting the normal RunLocal command/script.
145 42 [E] Andre K
146
h4. Fallback bei geändertem Serverpfad
147
148
* Problem:
149
** @RunLocal@ speichert den Remote-Pfad lokal in @RunLocal_SetCfgVariables.bat@ als @VarCfg_RemoteDir@.
150
** Wenn sich dieser Serverpfad später ändert, zeigt die lokale Installation weiterhin auf den alten Pfad.
151
** Ist dieser alte Pfad nicht mehr erreichbar, kann die normale Marker-Prüfung beim Start nicht mehr ausgeführt werden.
152
153
* Lösung:
154
** Nach erfolgreichem Login kann aus den Einstellungen ein Ersatzpfad gelesen werden:
155
*** @RunLocal__New_RemoteDir@
156
** Wenn der bisher gespeicherte @VarCfg_RemoteDir@ nicht erreichbar ist und @RunLocal__New_RemoteDir@ gesetzt sowie erreichbar ist:
157
*** wird der neue Pfad lokal als neuer @VarCfg_RemoteDir@ gespeichert
158
*** der Benutzer erhält einen Hinweis
159
*** PRODAT wird automatisch neu gestartet
160
*** beim nächsten Start läuft die normale RunLocal-Prüfung wieder über den bestehenden Standardablauf
161
162
* Wichtig:
163
** In derselben Sitzung wird bewusst *keine* zweite Marker-/Update-Prüfung direkt nach dem Login erzwungen.
164
** Ziel ist, die bestehende Startlogik unverändert weiterzuverwenden.
165
166
h4. Automatischer Neustart
167
168
* Wenn nach dem Login ein neuer @RunLocal__New_RemoteDir@ übernommen wurde, erhält der Benutzer einen Hinweis.
169
* Nach Bestätigung wird PRODAT automatisch beendet und über @AutoRestart.exe@ sofort neu gestartet.
170
* Bei einem sofortigen Neustart mit Parameter @0@ wird kein sichtbares Wartefenster angezeigt.
171
* Der Neustart wurde außerdem so erweitert, dass das neu gestartete PRODAT-Fenster wieder in den Vordergrund geholt wird.
172 41 [E] Rocco Kreutz
173 9 [E] Rocco Kreutz
&nbsp;
174
&nbsp;
175
176 23 [E] Rocco Kreutz
h1. Manuelles Setup / Installation
177 1 [X] Daniel S
178 23 [E] Rocco Kreutz
{{collapse(Manuelles Setup)
179
*Script - welches PRODAT in ein lokales Verzeichnis kopiert und aktuell hält*
180 5 [X] Daniel S
181 14 [X] Daniel S
* *Auf dem Rechner, auf dem Prodat in Zukunft lokal ausgeführt werden soll, dass Script \\<Server>\<Prodat-Installation\Administration\RunLocal\RunLocal_Setup.bat ausführen.*
182 3 [E] Rocco Kreutz
**  z.B.: 
183
*** Pfad zur Prodat-Installation auf dem Server (Remote) ist \\192.168.1.100\Prodat-ERP\
184
*** Auf dem Rechner dann Eingabeaufforderung starten 
185
*** \\192.168.1.100\Prodat-ERP\Administration\RunLocal\RunLocal_Setup.bat starten
186
* Damit wird alles konfiguriert und eingerichtet.
187
&nbsp;
188
&nbsp;
189 1 [X] Daniel S
190 3 [E] Rocco Kreutz
* RunLocal_Setup bietet ein Menu an
191
* Die einzelenen Menu-Punkte werden mit einem einzelnen Buchstaben angesteuert, welcher in [] vorweggestellt ist
192
* Nach Ausführung eines einzelnen Menu-Punktes, wird jeweils wieder das Menu angezeigt
193
** [S] Setze lokales Verzeichniss für weitere Ops
194
** [Q] Setze (cfg) Quell-Verzeichniss (Remote-Directory)
195
** [P] Setze (cfg) Programm
196
** [A] Setze (cfg) Programm-Paramter
197
** [Z] Zeige Konfiguration und lokales Verzeichniss
198
** [M] Schreibe Konfiguration-Datei
199
** [N] Lade Konfiguration-Datei
200
** [K] Kopiere Prodat nach lokal (Down-Sync)
201
** [E] Erstelle Windows-Task (automatisches Update von Lokal)
202
** [L] Lösche Windows-Task
203
** [C] Erstelle Shortcut (Prodat Instanzen beenden, Updaten, Starten)
204
** [D] Lösche Shortcut
205
** [X] Exit
206
&nbsp;
207
&nbsp;
208 1 [X] Daniel S
209 3 [E] Rocco Kreutz
* Die einzelnen Schritte
210
# [S] Geben Sie das lokale Verzeichniss an
211 4 [E] Rocco Kreutz
#* Muss nach jedem Start von RunLocal_Setup erneut anegegeben werden
212 3 [E] Rocco Kreutz
#* Prodat wird vom Server (Remote) in dieses Verzeichniss kopiert
213
#* In diesem Verzeichniss unter \Administration\RunLocal\ wird die Konfigurations-Datei gespeichert als auch weitere Scripts
214
# [Q] Geben Sie das Quell-Verzeichniss an
215
#* Wie in dem obigen Beispiel, wäre dies z.B: \\192.168.1.100\Prodat-ERP\
216
#* Sollten vor Ort statt UNC-Pfaden Laufwerke verwendet werden (z.B. mittels Login-Script verbunden), ist dies natürlich auch möglich (z.B: S:\Prodat-ERP\)
217
# Menu-Punkt [P] muss normalerweise nicht ausgeführt werden, da das Setup, dass zu startende Programm bereits standardmäßig auf ProdatSQL.exe setzt
218
#* Grundsätzlich ist es möglich ein anderes Programm anzugeben, welches gestartet/beendet (Task/Manuell) (nach Aktualisierung des lokalen Verzeichnisses) werden soll
219
# [A] Geben sie die Parameter an, mit denen Prodat gestartet werden soll
220
#* Der Standardwert ist -REMEMBER_SERVER:1 wird also für die meisten Fälle nicht ausreichend sein
221
#* Um herauszufinden welche Parameter nötig sind, schauen Sie am besten in die Eigenschaften der Startverknüpfung der bestehenden Prodat-Installation (welche via Server startet)
222
# [Z] Lassen Sie sich die momentanen Werte der Konfiguration anzeigen, um diese zu kontrollieren
223
# [M] Wenn Sie die korrekten Konfigurations-Werte angegeben haben, schreiben Sie diese in die lokale Konfigurations-Datei
224
# Der Menu-Punkt [N] lädt eine Konfigurations-Datei, muss also während der ersten Einrichtung nicht aufgerufen werden
225
#* Kann nur ausgeführt werden, sofern eine lokale Konfigurations-Datei existiert und das lokale Verzeichniss nach dem Start von RunLocal_Setup.bat angegeben wurde
226
#* Falls man die Konfigurations-Datei manuell bearbeitet hat z.B.
227
#* Wenn man das RunLocal_Setup bereits ausgeführt hatte, eine Konfigurations-Datei erstellt wurde und dann RunLocal_Setup erneut startet
228
# [K] Führt eine Synchronisierung des lokalen Verzeichnisses mit dem Quell-Verzeichniss aus
229
#* Dies ist eine echte Synchronisierung, d.h. dannach ist der Inhalt des lokalen Ordners EXAKT GLEICH mit dem Inhalt des Quell-Ordners mit Ausnahme der in der \Administration\RunLocal\exclude_default.rcj angegebenen Excludes
230
#* Unterordner \Administration\RunLocalder enthält zusätzlich die Konfigurations-Datei und nur die Scripte die benötigt werden
231
#* Die Ordner \Backup, \Temp und \Help werden nicht heruntergeladen (exclude_default.rcj)
232
#* *.7z und *.zip Dateien werden nicht heruntergeladen (exclude_default.rcj)
233
#* Sollten im lokalen Verzeichniss Dateien/Verzeichnisse existieren, welche nicht im Quell-Verzeichniss existieren (und welche nicht in exclude_default.rcj als excluded aufgeführt sind), werden diese gelöscht !!!
234
# [E] Erstellt eine Windows-Task (Windows Aufgabe, taskschd.msc)
235
#* Da der Arbeitspfad ("Starten in" Parameter in der Task) nicht mittels Kommandozeile gesetzt werden kann, MUSS dies manuell gesetzt werden
236
#** Entweder Aufgabenverwaltung über Windows-Starmenu starten 
237
#** oder taskschd.msc starten
238
#*** "Ausführen" über das Windows-Startmenu wählen und taskschd.msc eingeben
239
#*** oder über Eingabeaufforderung taskschd.msc starten
240
#** "Starten in" auf das Verzeichniss setzen, in dem sich das Script welches als Task ausgeführt wird, befindet (Verzeichniss-Teil - ohne den Dateiname - des angegebenen Scriptes einfach kopieren)
241
#* Diese Task wird täglich um 23 Uhr ausgeführt
242
#* Die Task führt folgende Schritte aus
243
#** Fährt ALLE Programm-Instanzen (mittels [P] angegebenes Programm) herunter
244
#** Aktualisiert das lokale Verzeichniss (Update - keine Synchronisierung, in exclude_default.rcj angegebene Excludes werden berücksichtigt)
245
#** Startet Programm neu (Programm welches mit [P] Konfiguriert wurde, mit den Paramtern welche mittels [A] konfiguriert wurden)
246
# Falls es nicht mehr gewünscht wird, dass automatisch das Update-Script ausgeführt wird, kann mit [L] die Windows-Task wieder gelöscht werden
247
# [C] Erstellt auf dem Desktop einen Shortcut, welcher das Update-Script startet (ALLE Programm-Instanzen beenden, lokales Verzeichniss aktualisieren, Programm starten)
248 1 [X] Daniel S
# [D] Löscht den Shortcut vom Desktop
249 3 [E] Rocco Kreutz
# [X] Beendet RunLocal_Setup (wird automatisch nach 30 Sekunden ohne Benutzer-Aktivität ausgeführt)
250 23 [E] Rocco Kreutz
}}
251 16 [E] Rocco Kreutz
252 1 [X] Daniel S
h2. Silent Install
253
254 17 [E] Rocco Kreutz
* RunLocal_Setup.bat kann mit 2 Parametern gestartet werden, um eine non-user-interaktive Installation eine der beiden Standard-Installationen auszuführen
255
** @RunLocal_Setup.bat SILENT_INSTALL_DEFAULT@
256 18 [E] Rocco Kreutz
*** Führt die Batch aus, als ob der Benutzer @1@ im Menu gedrückt hätte und dannach @x@
257 17 [E] Rocco Kreutz
** @RunLocal_Setup.bat SILENT_INSTALL_DEFAULTBDE@
258 18 [E] Rocco Kreutz
*** Führt die Batch aus, als ob der Benutzer @2@ im Menu gedrückt hätte und dannach @x@
259 20 [E] Rocco Kreutz
260
h3. Automatisierung (Standard 1)
261
262
* Mittels @HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce@ kann @\\Server\ProdatShare\Administration\RunLocal\RunLocal_Setup.bat SILENT_INSTALL_DEFAULT@ aufgerufen werden, um auf der Maschine Prodat-RunLocal zu installieren
263
* Der Shortcut zum starten wird auf dem Desktop des Benutzers angelegt, welcher das Setup tatsächlich ausführt
264
** Diesen Shortcut @Prodat Lokal - Aktualisieren und neustarten@ entweder auf den öffentlichen Desktop verschieben
265
** Oder eigenen ShortCut im öffentlichen Desktop erstellen mit Ziel: 'C:\ProdatERP\Administration\RunLocal\ProdatRunLocal.exe'
266 28 [X] Daniel S
267 29 [X] Daniel S
siehe auch:
268
https://redmine.prodat-sql.de/projects/prodat-v-x/wiki/Konfiguration_(CONFIGSERVERS)_Start_Parameter_Link#RunLocal
269 28 [X] Daniel S
270
[RunLocal]
271
AllowInstall=False