Bei einem Dienstnamen möchte ich den Benutzernamen abrufen, unter dem er ausgeführt wird (d. H. Der Benutzername, der auf der Registerkarte "Anmelden" im Eigenschaftenfenster eines Dienstes angezeigt wird). Es scheint nichts in der Klasse ServiceController
zu sein, um diese grundlegenden Informationen abzurufen. Nichts anderes in System.ServiceProcess
sieht so aus, als würde es diese Information auch bloßstellen. Gibt es dafür eine verwaltete Lösung, oder muss ich mich in eine niedrigere Ebene begeben?Wie kann ich den Benutzernamen abrufen, unter dem ein Windows-Dienst ausgeführt wird?
Antwort
WMI verwenden, mit dem System.Management Sie den folgenden Code versuchen:
using System;
namespace WindowsServiceTest
{
class Program
{
static void Main(string[] args)
{
System.Management.SelectQuery sQuery = new System.Management.SelectQuery(string.Format("select name, startname from Win32_Service")); // where name = '{0}'", "MCShield.exe"));
using (System.Management.ManagementObjectSearcher mgmtSearcher = new System.Management.ManagementObjectSearcher(sQuery))
{
foreach (System.Management.ManagementObject service in mgmtSearcher.Get())
{
string servicelogondetails =
string.Format("Name: {0} , Logon : {1} ", service["Name"].ToString(), service["startname"]).ToString();
Console.WriteLine(servicelogondetails);
}
}
Console.ReadLine();
}
}
}
Sie können dann später ersetzen Sie den kommentierten Code mit Ihrem Service-Namen, und es sollte nur die Instanzen des Service-Prozess zurückkehren das läuft.
Versuchen Sie folgendes:
System.Security.Principal.WindowsIdentity.GetCurrent();
aber die naheliegendste werden Sie lokale System oder Netzwerk. Der Grund, warum Sie diesen Benutzer nicht anzeigen können - dieser Dienst kann mehrere Benutzer verwalten (vom Desktop freigegeben, an die aktuelle Windows-Sitzung angehängt, mit freigegebener Ressource ...) Das System startet den Dienst, aber jeder Benutzer kann ihn verwenden.
Dann Sie die Eigenschaft Name des Windows Objekt erhalten aus dem obigen Befehl zurückgegeben. – ewall
-1 Dies gibt die 'WindowsIdentity' des aktuellen Benutzers zurück, nicht eines angegebenen Dienstes. – Pwninstein
@Pwninstein wie üblich Dienst wird von SYSTEM oder NETWORK Anmeldeinformationen gestartet - nicht von "angemeldeten" Benutzern. Siehe meine Änderungen dazu. Also klar, Sie wollen System-Account bekommen, der Dienst startet (meine Antwort ist korrekt darüber) oder aktuelle angemeldete Benutzerliste, die diesen Service nutzen könnte? – Dewfy
WMI ist dein Freund. Schauen Sie sich Win32_Service, speziell die StartName
Eigenschaft. Sie können auf WMI von C# aus über die System.Management.ManagementClass zugreifen.
Wenn Sie WMI nicht zuvor verwendet haben, this Artikel scheint ein ziemlich gutes Tutorial zu sein.
Danke! 15chars – Pwninstein
Diese Lösung funktioniert gut für mich:
ManagementObject wmiService = new ManagementObject("Win32_Service.Name='" + this.ServiceName + "'");
wmiService.Get();
string user = wmiService["startname"].ToString();
Fügen Sie einige Erklärung mit der Antwort für diese Antwort Hilfe OP bei der aktuellen Problem beheben –
public String getUsername() {
string username = null;
try {
ManagementScope ms = new ManagementScope("\\\\.\\root\\cimv2");
ms.Connect();
ObjectQuery query = new ObjectQuery
("SELECT * FROM Win32_ComputerSystem");
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(ms, query);
foreach (ManagementObject mo in searcher.Get()) {
username = mo["UserName"].ToString();
}
string[] usernameParts = username.Split('\\');
username = usernameParts[usernameParts.Length - 1];
} catch (Exception) {
username = "SYSTEM";
}
return username;
}
Sollte geben Sie einen Kontext zu Ihrem Code. – Milo
- 1. Wie bekomme ich den Benutzernamen in Python?
- 2. Wie kann ich überprüfen, ob ein Windows-Dienst ausgeführt wird
- 3. Wie kann ich programmgesteuert die Telefonnummer des Geräts abrufen, auf dem meine Android-App ausgeführt wird?
- 4. Wie kann ich ein Bild aus der Datenbank aus dem Code abrufen, den ich verwende?
- 5. Wie kann ich bestätigen, dass eine Methode unter dem Hauptzweig in Ziel C ausgeführt wird?
- 6. Wie kann ich überprüfen, wie oft ein Replikationsagent ausgeführt wird?
- 7. Benutzerinformationen über den Benutzernamen abrufen Von sql
- 8. Wie kann ich den Wert aus dem Textfeld abrufen?
- 9. Wie kann ich den authentifizierten Benutzernamen unter Apache mit einfacher HTTP-Authentifizierung und PHP erhalten?
- 10. Wie kann ich ein Sammelelement nach dem Abrufen entfernen (entfernen)?
- 11. Wie kann ich den aktuellen Benutzernamen erhalten - VERWENDEN VON MY CODE UNTER IN ASP.NET
- 12. Wie wird ein Konstruktor ausgeführt?
- 13. Parse.com konnte den Benutzernamen nicht von Parse.User.current abrufen?
- 14. Wie ermittele ich den Benutzernamen mit Facebook connect?
- 15. Wie kann ich den Benutzernamen von einem WCF-Authentifizierungsdienst erhalten?
- 16. Wie bekomme ich den aktuell angemeldeten Benutzernamen?
- 17. Kann ich den Zeitpunkt erkennen, an dem die Garbage Collection in .NET ausgeführt wird?
- 18. Wie kann ich den Speicher löschen, während ein langes PHP-Skript ausgeführt wird? versucht, unset()
- 19. Wie kann eine gespeicherte Prozedur den Namen der Datenbank abrufen, in der sie ausgeführt wird?
- 20. Wie kann ich den aktuell angemeldeten Benutzer-Benutzernamen im Modellfeld speichern, während ich ein Formular speichere?
- 21. Erhalten Sie den vollständigen Benutzernamen einen neuen Benutzernamen
- 22. C# GetKeyDown wird nicht unter Update ausgeführt
- 23. Wie kann ich den aktuellen Standort eines ActionBar MenuItem abrufen?
- 24. Wie identifiziere ich den Benutzernamen für mein Heroku Token?
- 25. Wie kann man überprüfen, ob ein Programm in Bash unter Ubuntu unter Windows und nicht nur in Ubuntu ausgeführt wird?
- 26. Wie kann Perls System() den Befehl ausgeben, der ausgeführt wird?
- 27. Wie wird ein Schema mit Emacs ausgeführt?
- 28. Wie kann ich den Benutzernamen/das Passwort eines ApplicationPool in IIS von C# ändern?
- 29. Wie geben Sie den Benutzernamen an, den VSSConverter.exe verwenden soll?
- 30. Wie kann ich den Wert in Schienen regelmäßig abrufen/aktualisieren?
Habe es noch nicht probiert, aber das sieht nach einem Gewinner aus! Vielen Dank! – Pwninstein