Ik ben bezig aan een applicatie dat als server dient voor een intern netwerk met PDA's. Ik maak kleine internetpagina's die via WiFi op te vragen zijn (of via elk ander netwerk natuurlijk). Ik maak gebruik van IntraWeb, het is alleen een beetje jammer dat ik het poortnummer van het component niet runtime kan wijzigen. Nu ben ik op zoek naar een stukje code dat mijn applicatie opnieuw kan starten. Ik heb twee mogelijkheden gehad maar die werken beide niet.
De eerste is deze:
Deze werkt niet omdat het formulier waarop de actie wordt uitgevoerd niet de MainForm van de applicatie is. Ik heb namelijk in de project-bron nog wat code staan om voor parameters etc die de automatische detectie van het mainform verprutsen.
De tweede:
Werkt niet omdat er in de project-code ook code zit die controleert of de applicatie niet toevallig twee keer wordt opgestart. Dus op het moment dat de nieuwe gestart wordt is de oude nog actief. De nieuwe wordt wel gestart maar blijft na de geboorte in coma (er gebeurt niets meer mee) en de eerste wordt gesloten.
Dit is de code waarmee ik een tweede instantie voorkom:
Ik ben op zoek naar een mogelijkheid om het herstarten voor elkaar te krijgen. Google en de nieuwsgroepen van borland bieden ook niet echt een oplossing, behalve diegene waar het weer misgaat me de CreateMutex.
De eerste is deze:
Delphi:
1
2
3
4
5
6
7
| var tmpAppName: PChar; begin tmpAppName := PChar(Application.ExeName); Close; ShellExecute(0, 'open', tmpAppName, nil, nil, SW_SHOWNORMAL); end; |
Deze werkt niet omdat het formulier waarop de actie wordt uitgevoerd niet de MainForm van de applicatie is. Ik heb namelijk in de project-bron nog wat code staan om voor parameters etc die de automatische detectie van het mainform verprutsen.
De tweede:
Delphi:
1
2
3
4
5
6
7
| var tmpAppName: PChar; begin tmpAppName := PChar(Application.ExeName); ShellExecute(0, 'open', tmpAppName, nil, nil, SW_SHOWNORMAL); Application.Terminate; end; |
Werkt niet omdat er in de project-code ook code zit die controleert of de applicatie niet toevallig twee keer wordt opgestart. Dus op het moment dat de nieuwe gestart wordt is de oude nog actief. De nieuwe wordt wel gestart maar blijft na de geboorte in coma (er gebeurt niets meer mee) en de eerste wordt gesloten.
Dit is de code waarmee ik een tweede instantie voorkom:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| appMutex := CreateMutex(nil, True, PChar(Application.Name)); if appMutex <> 0 then begin if GetLastError = ERROR_ALREADY_EXISTS then begin MessageBox(Application.Handle, PChar('Er is al een server actief. ' + #10 + 'U kunt deze herkennen aan het kleine satalieticoontje in de taakbalk. '), PChar('Server'), MB_OK or MB_ICONSTOP); CloseHandle(appMutex); Halt; end; end; //if appMutex |
Ik ben op zoek naar een mogelijkheid om het herstarten voor elkaar te krijgen. Google en de nieuwsgroepen van borland bieden ook niet echt een oplossing, behalve diegene waar het weer misgaat me de CreateMutex.
[ Voor 3% gewijzigd door FendtVario op 28-01-2004 16:12 . Reden: kleine code wijziging ]
www.fendt.com | Nikon D7100 | PS5