Ich konnte die (fast) gleiche Problem wie Sie Sie wie folgt vorgehen erfolgreich behandeln
public Class() //constructor, to create your log repository
{
InitializeComponent();
if (!System.Diagnostics.EventLog.SourceExists("YOURSource"))
{
System.Diagnostics.EventLog.CreateEventSource(
"YOURSource", "YOURLog");
}
eventLog1.Source = "YOURSource";
eventLog1.Log = "YOURLog";
}
Jetzt, Umsetzung:
protected override void OnStart(string[] args)
{...}
UND
benutzerdefinierte behandeln Befehle Anrufe:
protected override void OnCustomCommand(int command)
{
switch (command)
{
case 128:
eventLog1.WriteEntry("Command " + command + " successfully called.");
break;
default:
break;
}
}
Verwenden Sie nun diese in der Anwendung, in der Sie den Windows-Dienst rufen werden:
Enum Ihre Methoden zu verweisen: (denken Sie daran, Dienste Benutzerdefinierte Methoden erhalten immer einen Int32 (128 bis 255) als Parameter und mit Enum machen Sie es einfacher, sich an Ihre Methoden zu erinnern und sie zu steuern
private enum YourMethods
{
methodX = 128
};
eine spezifische Methode aufzurufen:
ServiceController sc = new ServiceController("YOURServiceName", Environment.MachineName);
ServiceControllerPermission scp = new ServiceControllerPermission(ServiceControllerPermissionAccess.Control, Environment.MachineName, "YOURServiceName");//this will grant permission to access the Service
scp.Assert();
sc.Refresh();
sc.ExecuteCommand((int)YourMethods.methodX);
diese Weise können Sie Ihren Dienst steuern.
Here können Sie überprüfen, wie Sie einen Windows-Dienst erstellen und installieren. More über die ExecuteCommand-Methode.
Viel Glück!
Link funktioniert nicht, und es scheint nur Werbung – user3800527
@ user3800527 ... und aus diesem Grund hat es viele Stimmen und die Akzeptanz: - \. Vielen Dank für den Kommentar, aber ich habe den Link aktualisiert. –
wählten Sie dann;) – user3800527