Start programma

Status
Niet open voor verdere reacties.

mosweg

Gebruiker
Lid geworden
6 apr 2010
Berichten
6
Ik weet hoe ik een programma opstart,
maar hoe kan ik via Updater.exe Client.exe opstarten maar Client.exe niet opstarten als het niet via Updater.exe is gegaan?
 
Om antwoord op deze vraag te krijgen zal je ons meer informatie moeten geven.

Begin met waar het om gaat? Heb je code en zo ja hoe ziet deze eruit? Wat wil je opstarten, een eigen geschreven programma of al een bestaand programma?

groeten vreugde
 
Het gaat om 2 zelf gescheven programma's, C++ Win32 Project,
Het doel is om mijn spel te updaten via Update.exe en dan via Updater.exe de Client.exe opstarten, dat is niet zo moeilijk,
Maar mijn probleem is nu dat je Client.exe ook op kan starten als je het nog niet geupdate hebt... (dubbelklik op Client.exe)
Hoe kan ik zorgen dat de Client.exe alleen opgestart kan worden door Updater.exe ???
 
je kan het zo doen, ik weet niet of dit het makkelijkst is....

Maar, de updater een .exe en dan de setup een .dll en dan via de updater de loadlibrary functie gebruiken om setup te starten
 
Met gebruik van 2 unieke mutexen kan dit lukken.

In het update programma maak je een unieke mutex aan (mutex1), vervolgens voer je het client programma uit. Het eerste wat je client programma doet is ook een unieke mutex maken (mutex2) en controleren of mutex2 al bestaat. Bestaat mutex2 dan weet je dat er al een client programma draaiende is en sluit je dit tweede client programma af (dit wordt algemeen gebruikt om te voorkomen dat een programma meer dan 1 maal op het zelfde systeem draait).

Als mutex2 niet bestaat controleer je of mutex1 bestaat (aangemaakt door het update programma). Bestaat mutex1 niet dan sluit je het client programma af (in dit geval is het client programma dus door een ander programma dan het update programma uitgevoerd). Bestaat mutex1 wel dan sluit je mutex1.

Het is heel belangrijk dat mutex1 wordt gesloten als het client programma is uitgevoerd.

Nou weet ik niet of het update programma moet draaien terwijl het client programma draait. Zo niet, dan sluit je het update programma simpelweg af nadat deze het client programma heeft opgestart en je bent klaar. Zo wel, dan kan dit op een aantal manieren.

Een manier is om een korte periode te wachten wanneer het update programma het client programma heeft uitgevoerd en vervolgens controleren of mutex2 al is aangemaakt, zo wel dan kun je nu mutex1 sluiten, zo niet dan wacht je nogmaals en controleer je opnieuw (lus).

Een betere manier is om het update programma te laten weten via het client programma dat het mutex1 moet sluiten. Dit kan ook weer op een aantal manieren.

Een andere manier is om mutex1 te sluiten door de CreateRemoteThread functie te gebruiken in het client programma om zo de CloseHandle functie uit te voeren vanuit het update programma.


Code voorbeeld van CreateMutex die je in ieder geval nodig zult hebben.
Code:
HANLDE hMutex2 = CreateMutex( NULL, FALSE, "mutex2" );

if ( hMutex2 != NULL )
{

    if ( GetLastError() != ERROR_ALREADY_EXISTS )
    {
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan