Laden...

ServiceStartMode setzen Automatic/Manual

Erstellt von w1z4rd2003 vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.140 Views
w1z4rd2003 Themenstarter:in
624 Beiträge seit 2006
vor 16 Jahren
ServiceStartMode setzen Automatic/Manual

hallo

mit diesem Code starte ich den Service "Windows Installer" falls er gestoppt ist.
Ich möchte jetzt eine überprüfung einfügen dass wenn der ServiceStartMode auf Manual ist es auf Automatisch wechselt.

wie kann ich dieses ServiceStartMode von meinem service ansprechen?



        static void Main(string[] args)
        {
            //ServiceInstaller m_ThisService;
            ServiceController service = new ServiceController("Windows Installer");
            //m_ThisService = new ServiceInstaller();
            
            if (service.Status == ServiceControllerStatus.Stopped)
            {
                service.Start();
            }
        }

183 Beiträge seit 2004
vor 16 Jahren

ServiceStartMode wird vom ServiceInstaller verwendet, [...]

Die ServiceInstaller-Eigenschaftenwerte können nach der Installation nicht mehr geändert werden. Um den StartType zu ändern, muss entweder der Dienst deinstalliert und anschließend neu installiert werden, oder es müssen die Einstellungen manuell mithilfe des Dienststeuerungs-Managers geändert werden.

Evtl. wäre es noch möglich den Wert über die Registry zu ändern ...

So einfach wie möglich, aber nicht einfacher. [Albert Einstein]

take a look at
* baer-torsten.de
* codinghints

w1z4rd2003 Themenstarter:in
624 Beiträge seit 2006
vor 16 Jahren

hallo el toro

danke für deine Antwort. Habe die Änderung durch die Registry geändert und es funktioniert.
Momentan läuft alles perfekt. ich kann die services starten.
Ein problem habe ich beim stoppen.
Wenn ich z.B 10 services starte und sie danach stoppe muss ich beim stoppen das exe 10 mal anklicken damit jeder services gestoppt wird.

irgendwie habe ich das gefühl das er beim lesen des ini files immer nur eine zeile liest und deshalb auch immer nur ein services zu mal gestoppt wird. Beim debuggen wird aber durch die schleife immer alle zeilen gelesen.

Und komisch ist auch noch das dieses tool auf dem entwicklungs pc die services alle auf einmal stoppt. Sobald ich es auf einem anderen pc laufen lasse wird immer nur einer aufs mal gestoppt.

der code sieht so aus:


static void Main(string[] args)
        {
                string startuppath = Application.StartupPath;
     
                StreamReader objReader = new StreamReader(startuppath + "\\Services.ini");


                string sLine = "";
                ArrayList arrText = new ArrayList();


                while (sLine != null)
                {
                    sLine = objReader.ReadLine();
                    if (sLine != null)
                        arrText.Add(sLine);
                }
                objReader.Close();

                foreach (string sOutput in arrText)
                {
                    string sleep = sOutput.Substring(0, 5);
                    if (sleep == "sleep")
                    {
                        string time = Right(sOutput, 2) + "000";
                        int inttime = int.Parse(time);
                        System.Threading.Thread.Sleep(inttime);
                    }

                    if (Right(sOutput, 5) == "/Stop")
                    {
                        int sOutputlength = sOutput.Length;
                        int Servicename = sOutputlength - 6;
                        string Service = sOutput.Substring(0, Servicename);

                        ServiceController service = new ServiceController(Service);
                        bool canstop = service.CanStop;

                        if (canstop == true)
                        {
                            service.Stop();
                        }
                    }

                    if (Right(sOutput, 3) == "exe")
                    {
                        System.Diagnostics.Process.Start(sOutput);
                    }
                }
             }

183 Beiträge seit 2004
vor 16 Jahren

Was machtn Right(...) und wie sieht deine ini aus?

So einfach wie möglich, aber nicht einfacher. [Albert Einstein]

take a look at
* baer-torsten.de
* codinghints

w1z4rd2003 Themenstarter:in
624 Beiträge seit 2006
vor 16 Jahren

die ini sieht z.b so aus:

MSIServer /Stop
TlntSvr /Stop
Right(sOutput, 5) == "/Stop")

wird von rechts 5 zeichen gelesen und überprüft ob diese mit dem String "/Stop" übereinstimmen. Wenn ja wird der Service gestoppt.

danach durchläuft er die schleife nochmals und überprüft beim zweiten Service wieder mit

Right(sOutput,5)

ob er auch gestoppt werden muss. usw

183 Beiträge seit 2004
vor 16 Jahren

Keine Exception, keine Fehler, keine Einträge im Ereignisprotokoll?

So einfach wie möglich, aber nicht einfacher. [Albert Einstein]

take a look at
* baer-torsten.de
* codinghints

w1z4rd2003 Themenstarter:in
624 Beiträge seit 2006
vor 16 Jahren

Nein nichts.
Wenn ich auf meiner Maschine 4 Services starte und sie danach stoppe werden sie alle gestartet und beim stoppen werden auch alle gestoppt.
Das Tool habe ich auf einem Server kopiert. Beim starten der Services werden alle gestartet und beim stoppen wird immer nur einer gestoppt. ich muss danach immer wieder auf stoppen klicken damit der 2 dann der 3 und zu schluss der 4 gestoppt wird.

Auf dem Server kann ich visual studio nicht installieren und somit auch nicht debuggen. Aber das Programm ist ja das gleiche wie auf meiner Maschine. Un da funktioniert es. 🤔

183 Beiträge seit 2004
vor 16 Jahren

Bau erstmal ein paar Consolenausgaben ein. Ansonsten wüsst ich jetzt erstmal nicht weiter 🙁

So einfach wie möglich, aber nicht einfacher. [Albert Einstein]

take a look at
* baer-torsten.de
* codinghints

B
94 Beiträge seit 2007
vor 16 Jahren
Remote Debuggen

Hi,

es gibt die Möglichkeit eine Dienst Remote zu debuggen.

Gruß Bounty

w1z4rd2003 Themenstarter:in
624 Beiträge seit 2006
vor 16 Jahren

hallo zusammen

habe ungefähr gefunden wo der fehler liegt. Weiss aber nicht wie ich in behebe 🤔

Ich hab in meinem Tool ja eine Schleife die alle Services durchläuft die im ini file sind. Der erste Service wird gestoppt, danach kommt eine Exception und er geht aus der Schleife.
Wenn man wieder klickt stoppt er den nächsten Services und geht wieder aus der Schleife raus wegen der Exception. (Ist im geposten Code noch nicht drin, habe ein try catch eingebaut)

Komischerweise wird der Service trotzdem gestoppt.

Die Meldung ist diese:


ClariFINodeService1 /StopClariFINodeService1 /StopClariFINodeService2 /Stop
Unhandled Exception: System.InvalidOperationException: Cannot stop ClariFINodeS
rvice2 service on computer '.'. ---> System.ComponentModel.Win32Exception: The
ipe has been ended
   --- End of inner exception stack trace ---
   at System.ServiceProcess.ServiceController.Stop()
   at StartServices.Program.Main(String[] args)

w1z4rd2003 Themenstarter:in
624 Beiträge seit 2006
vor 16 Jahren

zu sagen ist auch noch das diese meldung nur auf dem server erscheint.
wenn ich die services stoppe auf meinem entwicklungsrechner funktioniert alles bestens.