verhindern das ein programm mehrfach gestartet wird
-
guten morgen
ich arbeite gerade an einem lizenz server. es wird ein programm ausgeliefert, welches überall installiert werden kann, aber nur mit den server läuft. man kauft also sagen wir 10 lizenzen für das prog, dann dürfen 10 progs gleichzeitig ausgeführt werden. das prog macht eine anfrage an den server und der server erlaubt, oder verbietet je nachdem wieviel progs schon laufen.
problem 1
der server darf nur auf einem bestimmten host laufen
bis jetzt wird nur der hostname ausgelesen und mit der lizenzdatei verglichen, allerdings kann man ja einfach den hostnamen ändern und den server überall installieren. vielleicht zusätzlich noch irgendeine hardware adress auslesen?
wenn ja welche am besten und vielleicht ein paar stichpunkte für die umsetzung.problem 2
es muss verhindert werden, dass der server öfter gestartet wird. sonst kauft man 10 lizenzen und startet den server einfach so oft, wieviel lizenzen man braucht. erste idee war, das ich den port festlege und der server nur auf diesem port läuft. aber da kann man ja auch ne zweite netzwerkkarte reinpackn oder vielleicht reicht sogar nurn alias auf die karte um das zu umgehen.
dann dacht ich daran die prozess namen auszulesen, allerdings reicht da ja ein einfaches umbenennen der server.exe um einen anderen prozess namen zu erzeugen.
jemand einen ansatz wie man das machen könnte?ich hoffe jemand kann mir irgendwie weiter helfen, falls nich trotzdem danke fürs lesen

gruß part
ps: ich komme aus der open source ecke und es is schon erschreckend, womit man sich alles rumschlagen muss mit diesem lizenz und closed source thema

unterbindet man eine möglichkeit taucht die nächste auf
aber spass machts trotzdem
-
nochma schnell ne frage zu den festgelegten port.
mal angenommen ich habe 2 netzwerkkarten, wie lege ich fest an welcher der server lauscht? im code habe ich einfach mit bind gearbeitet, also keine ip angegeben. is diese möglichkeit vielleicht doch sicherer als ich dachte, weil mans nicht so einfach auf die zweite karte binden kann?
-
Zu 2: Das Programm sollte irgendwie erkennen, daß es bereits läuft - aber das geht nicht mit reinem Ansi-C++. Lösungen auf Systemebene bestehen z.B. aus einem Mutex, den du beim Start reservierst (bzw. abbbrichst, wenn er schon reserviert war), oder unter WinAPI auf FindWindow().
-
hallo CStoll
vielen vielen dank für die schnelle antwort (42 sek :D) das hat mein problem 2 komplett gelöst. funktioniert einwandfrei
danke