Moin,
Wenn ich das richtig verstehe, dann heißt das: Wenn mehrere Fakturama-Installationen auf die gleiche db zugreifen (was möglich ist), dann sollte sichergestellt sein, dass immer nur ein Benutzer fakturama gleichzeitig gestartet hat.
Das ist korrekt. Die Idee mit der Batchdatei funktioniert denke ich auch, allerdings müßtest Du die Zeile mit der Pause um eins nach unten verschieben (nach dem Aufruf der EXE).
Viele Grüße
Ralf.
Wichtige Infos zum Posten im Forum.
Fehler gefunden?
Unter Win ist das etwas undurchsichtig, wie Batch-Dateien funktionieren (unter Linux ist das m. E. einfacher): Mal wird gewartet, bis ein Befehl abgearbeitet ist und dann erst die nächste Zeile gestartet und mal nicht.
Wenn ich die pause nach dem copy-Befehl weglasse, wird nach meinen Tests fakturama nicht automatisch gestartet, die batch blieb sogar hängen (keine Ahnung warum). Die pause muss also sein.
Wenn fakturama gestartet ist, dann wartet die Batch, bis fakturama geschlossen wird und löscht erst dann die lock-Datei. Demnach braucht man hier keine pause. Insofern sollte es so richtig sein.
-------------------------------------
Hier mal eine bash-Variante für Linux. Da liegt die lock-Datei auf einem FTP-Server, die zunächst in ein lokales Verzeichnis (verzftp muss vorhanden und leer sein) gemountet wird und dann normal abgefragt werden kann (Entsprechendes habe ich unter Win nicht hingekriegt).
#!/bin/bash verzftp="/home/Nutzer/ftp-fakturamalock" ftppas="<Mein-FTP-Passwort>" curlftpfs <FTP-Benutzername>:$ftppas@<FTP-servername>/fakturamalock $verzftp -o allow_other,disable_eprt,tlsv1 if [ ! -f $verzftp/.lock ]; then echo "Lockdatei nicht vorhanden!" touch $verzftp/.lock /usr/share/fakturama2/Fakturama rm $verzftp/.lock else echo "Lockdatei vorhanden!" gxmessage "Kann fakturama nicht starten. Jemand anderes im Netz benutzt es schon!" fi fusermount -u $verzftp
In diesem Fall liegt die lockdatei auf dem Server im Verzeichnis fakturamalock. Natürlich müssen gxmessage und curlftpfs installiert sein
... Es gab unter ms dos sowohl Pause als Befehl zum Warten auf Tastendruck als auch wait mit Zeitangabe zb10 Sekunden
What is the wait command in cmd?
Parameters
Parameter Description
/t <timeoutinseconds> Specifies the decimal number of seconds (between -1 and 99999) to wait before the command processor continues processing. The value -1 causes the computer to wait indefinitely for a keystroke.
/nobreak Specifies to ignore user key strokes
Die Batch guckt nach, ob die ,lock-Datei existiert. Wenn ja, dann wird fakturama nicht gestartet. Wenn nein, wird die Datei erstellt und fakturama gestartet. Wenn der Benutzer fakturama wieder schließt, wird auch die lock-Datei wieder gelöscht und das Programm somit für andere Nutzer wieder freigegeben.
Eine schöne Idee... Allerdings ist diese Datei ohne Inhalt und es erfolgt nur eine Einzige Prüfung ob sie vorhanden ist. Stattdessen sollte m.E. in die Datei der Rechnername des Arbeitsplatz von dem aus Sie erstellt wird geschrieben werden:
echo %computername% > %lockdatei%
Damit liese sich zum einen Anzeigen für welchen Arbeitsplatz ggf. bereits eine Sperrung erfolgte und sollte dies der eigene sein (z.B. weil der Batch vor dem schließen von Fakturama abgebrochen wurde) könnte der Programmstart dennoch erfolgen ohne die lock-Datei erst selbst löschen zu müssen. Wichtiger wäre aber das nach Erstellung einer lock-Datei und vor dem Programmaufruf von Fakturama, nochmal geprüft wird ob der Inhalt der Lock-Datei mit dem Rechnernamen identisch ist und der lock somit tatsächlich für den eigenen Arbeitsplatz erfolgte. Damit wären dann auch evtl. Konflikte bei einem Zeitgleichem Programmaufruf abgefangen. Ergo: Nur der Arbeitsplatz dessen Rechnername tatsächlich in der Lock-Datei steht darf A = das Programm starten und B = die Lock-Datei wieder löschen. Alle anderen zeigen nur an von wem die Daten exklusiv in Beschlag genommen wurden.
Fakturama 2.1.3 auf Win10 pro x64 an MariaDB auf ner DiskStation
Bevor sich hier jetzt alle auf die Batch/Bash Variante des Locking stürzen...
Besser wäre es, das direkt in Fakturam zu integrieren (inkl. User & Name), so war auch mein ursprünglicher Post gedacht.
@rheydenr siehst du, vom Zeitaufwand her, ne Chance das einzubauen?
du hast recht, das wäre natürlich komfortabler.
In einem Punkt würde ich dir aber widersprechen: Konflikte bei einem zeitgleichem Programmaufruf sehe ich nicht, denn die lockdatei wird vor dem fakturama-Programmaufruf erzeugt und erst nach Beendigung gelöscht. Ich sehe daher kein Mini-Zeitfenster, in dem ein gleichzeitiges Starten von fakturama auf zwei Rechnern möglich wäre. Korrigier mich, wenn ich mich irre
@oko
Ja das wäre natürlich echt Wünschenswert de facto muss man aber wohl einsehen, dass dies einen ziemlichen Aufwand nach sich zieht und etliche andere Featurewünsche (siehe Bug Tracker) noch wesentlich mehr Priorität haben dürften und das auch für eine größere Anzahl an Anwendern. Das Programm wird ja hauptsächlich von Ralf allein nebenher weiterentwickelt und solange da nicht mehr qualifizierte Unterstützung in Sicht ist, ist mit schnellen großen Entwicklungsschritten kaum zu rechnen.
@udo
Ob denn die Lock-Datei auch tatsächlich erstellt werden konnte ist zum Zeitpunkt des Programmaufruf ja völlig unbekannt... Du gehst einfach nur davon aus! Es geht eben nicht nur darum ein potenziell möglichen Konflikt bei einem Zeitgleichen Programmstart (so gering dies auch erscheinen mag) abzufangen, sondern auch zu prüfen ob die Lock-Datei für den jeweiligen Arbeitsplatz auch tatsächlich erstellt wurde (Stichwort fehlende Schreibrechte auf dem Netzlaufwerk). Wenn solch offensichtliche Konstellationen nicht berücksichtigt werden, bringt es keinen Mehrwert und wiegt Anwender m.E. nur in falscher Sicherheit.
Fakturama 2.1.3 auf Win10 pro x64 an MariaDB auf ner DiskStation
Moin, aktuell sehe ich da wirklich keine Chance. Da sind andere Dinge derzeit wesentlich höher priorisiert...
Viele Grüße
Ralf.
Wichtige Infos zum Posten im Forum.
Fehler gefunden?
.. hallo Leute,
zuallererst mal einen ganz großes Danke Lob und Anerkennung für die unglaublich intensive Beteiligung an einem Thema, das ich eigentlich ohne viele Erwartungen in das Forum gestellt habe.
Da würde ich doch glatt sagen alle zehn Daumen rauf 👍🏻
Zusammenfassend als Quintessenz aus der Gesamtdiskussion:
- Das Programm ist aktuell nicht zum Mehrplatznutzung vorgesehen
- Das Programm kann durchaus von mehreren PCs benutzt werden, aber nicht zeitgleich!
- Das Dateiverzeichnis und Datenbank Verzeichnis muss dann aber für alle erreichbar sein
- Die Datenbank muss entweder auf jedem PC installiert sein und die datenbankdatei von der Freigabe erreichen
- Oder die Datenbank wird auf einem eigenen Datenbank Server beispielsweise PC, raspberry, oder Synology NAS mit Maria dB abgelegt und dann vom jeweils aktiven Rechner benutzt
-
Eine gleichzeitige Nutzung von mehreren Geräten ist nicht empfohlen und würde Inkonsistenzen möglicherweise verursachen -- Kurzfristig ist eine Abänderung der Software nicht vorgesehen weil andere Themen Priorität haben !
Aber:
Das Programm ist Multimandanten-fähig, dafür über Startparameter (vgl Handbuch) das passende Datenverzeichnis (u.a. wegen Vorlage Rechnung Logo etc) angeben
Wunsch and Handbuch:
.. Eine Dokumentation zum externe Datenbank einrichten und nutzen (etwas konkreter mit Bsp Synology/Raspi MarioDB MySQL)
das wäre toll aber nicht prio ^^ .. hier war ich als EInsteiger klar (über)fordert
Jetzt verstehe ich, was du meinst. Und du hast recht: Perfekt ist das nicht. Ich habe deshalb jetzt mal drangesetzt und Prüfroutinen in die Skripte eingebaut:
Windows-Batch
Die Batch prüft jetzt, ob die lock-Datei erstellt werden konnte. Wenn nicht, erfolgt ein Abbruch
@echo off set lockdatei=C:\fakturama\.lock set fakturamaexe="C:\Program Files\Fakturama2\Fakturama.exe" IF EXIST %lockdatei% ( echo Kann Fakturama nicht starten. Jemand anderes benutzt es schon! pause ) ELSE ( echo Kann Fakturama starten. Erstelle jetzt die lock-Datei pause copy NUL %lockdatei% && ( echo lock-Datei erfolgreich erstellt echo Ich starte jetzt fakturama. DIES FENSTER OFFEN LASSEN. Es schliesst sich nach dem Beendigen von fakturama automatisch! pause %fakturamaexe% del %lockdatei% ) || ( echo FEHLER: Konnte die lock-Datei %lockdatei% nicht erstellen! Skript abgebrochen pause ) )
Linux bash
Entsprechend beim Linux-bash. Hier wird noch zusätzlich geprüft, ob eine Verbindung zum FTP-Server hergestellt werden konnte
#!/bin/bash
verzftp="/home/<Nutzername>/ftp-fakturamalock"
ftppas="<FTP-Passwort>"
if
curlftpfs <FTP-Benutzername>:$ftppas@<FTP-Servername>/fakturamalock $verzftp -o allow_other,disable_eprt,tlsv1
then
echo "Verbindung zum lock-Pfad erfolgreich"
error="0"
else
gxmessage "Verbindung zum lock-Pfad NICHT erfolgreich. Skript wird beendet"
error="1"
fi
if [ $error == "0" ]
then
if [ ! -f $verzftp/.lock ];
then
echo "Lockdatei nicht vorhanden!"
if
touch $verzftp/.lock
then
/usr/share/fakturama2/Fakturama
rm $verzftp/.lock
else
gxmessage "Konnte lock-Datei nicht erstellen. Skript wird beendet"
fi
else
echo "Lockdatei vorhanden!"
gxmessage "Kann fakturama nicht starten. Jemand anderes im Netz benutzt es schon!"
fi
fusermount -u $verzftp
fi
Ich denke, das Schlimmste, was jetzt noch passieren kann, ist, dass die lock-Datei nicht gelöscht wird nach dem Beendigen von fakturama. Aber gut, in den seltenen Fällen muss man dann halt alles beenden und die Datei händisch löschen.