Ich habe eine einfache Kundenverwaltung als Java-App entwickelt und greife dabei auf einen MySQL-Server zu. Diese Anwendung läuft ganz einfach auf einem Windows-PC. Nun habe ich folgendes Problem: Wenn der Anwender den MySQL-Server nicht automatisch startet, crasht meine Applikation. Ich muss also prüfen, ob eine Serverinstanz mit meiner DB geladen ist und falls nein, diese starten. Wie mache ich so etwas am Besten?
Das ist schon mal gut. Aber welchem Benutzer (DAU) traust du zu einen Dienst zu starten? Darum kann man ja mal versuchen ober man den Dienst selber starten kann.
Sofern der MySQL Server als Service / Dienst eingerichtet ist, kannst du folgende Dinge versuchen:
Unter Windows gibt es das Kommandozeilenprogramm "sc", mit ihm ist es unter anderem möglich den Status eines Dienstes abzufragen.
String[] command = { "cmd", "/c", "sc", "query", "servicename" }; Process process = Runtime.getRuntime().exec(command); BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = input.readLine(); if (line == "blubb") { .. } // Musst schauen was drin steht, STATE: gibt dir den status
Über folgenden Befehl kannst du den Dienst starten:
String[] command = { "cmd", "/c", "net", "run", "servicename" }; Process p = Runtime.getRuntime().exec(command);
In Win7 gibt es die Befehle aufjedenfall. Wie es mit UAC aussieht kann ich dir aus dem Kopf leider nicht beantworten, müsste ich selbst ausprobieren (Und ich hab grad kein Win7 zur Hand).