Wie kann man sagen, wenn Methode von Windows-Dienst in .NET genannt wird (verwaltet) -Code

StackOverflow https://stackoverflow.com/questions/911921

  •  06-09-2019
  •  | 
  •  

Frage

Wie kann ich feststellen, ob eine Methode, die ich in verwaltetem Code schreibe ist sein Anruf von einer interaktiven App vs Windows-Dienst?

War es hilfreich?

Lösung 2

Ich glaube, ich kann dies herausgefunden haben (zumindest das funktioniert für meine Bedürfnisse - die Leistung kann variieren, je nachdem, was Sie zu tun versuchen). Es gibt eine Eigenschaft aus der Objektumgebung hängen genannt „UserInteractive“. Es sagt Ihnen, ob Sie in einem Zusammenhang mit Zugriff auf den Desktop ausgeführt werden.

Andere Tipps

Welcher Teil eines Windows-Dienstes ist es, dass Sie wissen wollen? Oder welcher Teil einer interaktiven App mögen Sie nicht wissen? Was zählt eigentlich für Sie?


Jedes Mal, wenn ich eine Anfrage, wie diese zu hören, ist es fast immer ein Fehler im Design. Ich würde vorschlagen, ein paar Antworten:

  1. Lassen Sie den Anrufer Ihnen sagen, welche Formatierungsprogramm zu verwenden, oder
  2. Legen Sie den Namen der Formatierungsklasse in eine Konfigurationsdatei. Haben alle Formatierer die gleiche Schnittstelle implementieren. Zur Laufzeit Sie das erste Mal einen Formatierer benötigen, erstellen Sie eine Instanz der in der Konfigurationsdatei angegeben, und es durch die gemeinsame Schnittstelle aufrufen.
  3. Sie das Rad nicht neu erfinden. Verwenden Sie die Klassen in System.Diagnostics, die in der Tat 2 viel wie mein # konfigurieren.

Es ist fast immer ein Fehler, Code auf den Kontext empfindlich sein es in genannt wurde.

Es gibt mindestens zwei Möglichkeiten, dies zu tun:

  1. "System.Reflection.Assembly.GetCallingAssembly (). Fullname" den Namen der Assembly zurück, die Ihr Code aufrufen.
  2. „Environment.StackTrace“ wird den vollen Stack-Trace für die Rückkehr des Code ruft. Sie sollten Ihre Rufmethode Namen in der Zeichenfolge sehen.

Sie können zwei verschiedene Logger definieren: ein für interaktive Anwendungen und einen für Windows-Dienst. und lassen Sie Client auswählen, welche Logger er will mit einer Config-Datei verwenden. Sie können auch einen Standard-Logger haben, wenn Kunden einen falschen Logger wählen oder konfigurieren vergessen zu. Ich denke, es sollte eine bessere Idee konfigurierbar haben Funktionen wie Protokollierung und Formatierung Nachricht sein.

Sie wissen nicht, ob es eine Möglichkeit builtin ist, aber einen Blick auf die System.Diagnostics.Process Klasse. Es hat unter anderem eine GetService() Methode, vielleicht wird das Ihnen helfen. Wenn das fehlschlägt, gibt es das StartInfo Element, das nützliche Informationen enthalten.

Wenn Sie nicht mit PInvoke dagegen haben, können Sie den übergeordneten Prozess des aktuellen Prozesses erhalten. Wenn es unter dem Konto ausgeführt NT AUTHORITY \ SYSTEM und es ist Name ist service.exe , der aktuelle Prozess ist (wahrscheinlich) eine Dienstleistung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top