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();
}
}
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
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);
}
}
}
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
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
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
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. 🤔
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
Hi,
es gibt die Möglichkeit eine Dienst Remote zu debuggen.
Gruß Bounty
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)
zu sagen ist auch noch das diese meldung nur auf dem server erscheint.
wenn ich die services stoppe auf meinem entwicklungsrechner funktioniert alles bestens.