Καλημέρα...
Υπάρχει μια εφαρμογή που εκκινήται σαν υπηρεσία. Η συγκεκριμένη εφαρμογή, με το OnStart(), ξεκινά ένα εξωτερικό πρόγραμμα ( Java ) με μια κλήση Process.
Κρατάω πάντα μια αναφορά στην κλάση τόσο για την εφαρμογή της Java όσο και για την ίδια την υπηρεσία που ξεκίνησε το εξωτερικό πρόγραμα.
Όταν σταματώ την υπηρεσία μου λένε τα windows, δεν είναι δυνατό να διακόψουν την υπηρεσία η υπηρεσία δεν επέστρεψε σφάλμα, θα μπορούσε να είναι εσωτερικό σφάλμα των windows ή της υπηρεσίας

Οκ, είναι δικό μου. Αλλά δεν καταλαβαίνω γιατί.

Το παράδοξο, αν κάνω δεύτερη προσπάθεια να την σταματήσω, σταματάει η υπηρεσία, χωρίς να τερματίζει και η εφαρμογή της Java, δίνοντας και ένα μήνυμα ότι δεν ήταν δυνατό να διακόψουν την υπηρεσία τα windows!!! Αλλά υπηρεσία τελικά δεν υπάρχει, και η Java συνεχίζει...

Και ολίγο κώδικας:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| protected override void OnStop() {
// TODO: Add code here to perform any tear-down necessary to stop your service.
eventLog1.WriteEntry("Stopping.Service....");
proc.Close();
if ( !proc.HasExited ) {
proc.Kill();
eventLog1.WriteEntry("Killed.Java");
}else
eventLog1.WriteEntry("Stoped.Java");
eventLog1.WriteEntry("Service shell. Terminating...");
//Αυτό είναι μια επιπλέον ενέργεια που σκέφτηκα...
IEnumerator itr = serviceProcess.Modules.GetEnumerator();
while ( itr.MoveNext() ) {
( (Process) itr.Current ).Kill();
}
eventLog1.WriteEntry("Service shell. Terminated");
} |