it-swarm.com.de

So finden Sie den Windows-Dienstexe-Pfad

Ich habe einen Windows-Dienst und muss ein Verzeichnis erstellen, um Informationen zu speichern. Der Verzeichnispfad muss relativ zu der Windows-Dienst-Exe-Datei sein.

48
NDeveloper
98
Incognito

Tipp: Wenn Sie den Startpfad des installierten Windows-Dienstes finden möchten, schauen Sie hier in der Registrierung nach.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ + ServiceName

Es gibt Schlüssel zum Windows-Dienst

Um den Pfad für den Dienst abzurufen, können Sie ein Verwaltungsobjekt verwenden. ref: https://msdn.Microsoft.com/en-us/library/system.management.managementobject(v=vs.110).aspxhttp: // dotnetstep blogspot.com/2009/06/get-windowservice-executable-path-in.html

using System.Management;
string ServiceName = "YourServiceName";
using (ManagementObject wmiService = new ManagementObject("Win32_Service.Name='"+ ServiceName +"'"))
                {
                    wmiService.Get();
                    string currentserviceExePath = wmiService["PathName"].ToString();
                    Console.WriteLine(wmiService["PathName"].ToString());
                }
13
Abhay

Anstatt ein Verzeichnis relativ zur ausführbaren Datei zu verwenden und daher Administratorrechte zu benötigen, verwenden Sie das allgemeine Anwendungsdatenverzeichnis, auf das über zugegriffen werden kann 

Environment.GetFolderPath(SpecialFolder.CommonApplicationData)

Auf diese Weise benötigt Ihre App keinen Schreibzugriff auf ein eigenes Installationsverzeichnis, wodurch Sie sicherer sind.

12
Stewart
string exe = Process.GetCurrentProcess().MainModule.FileName;
string path = Path.GetDirectoryName(exe); 

svchost.exe ist die ausführbare Datei, die Ihren Dienst in system32 ausführt. Daher müssen wir zu dem Modul gelangen, das vom Prozess ausgeführt wird.

8
Sachin

Versuche dies

System.Reflection.Assembly.GetEntryAssembly().Location
8
ramin eftekhari

Das Standardverzeichnis für einen Windows-Dienst ist der Ordner "System32". In Ihrem Dienst können Sie jedoch das aktuelle Verzeichnis in das Verzeichnis ändern, das Sie in der Dienstinstallation angegeben haben. Gehen Sie dazu in Ihrem OnStart folgendermaßen vor:

        // Define working directory (For a service, this is set to System)
        // This will allow us to reference the app.config if it is in the same directory as the exe
        Process pc = Process.GetCurrentProcess();
        Directory.SetCurrentDirectory(pc.MainModule.FileName.Substring(0, pc.MainModule.FileName.LastIndexOf(@"\")));

Edit: eine noch einfachere Methode (aber ich habe es noch nicht getestet):

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
5
derek

Das hat mir den Trick gebracht

Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);    
1
Danw25