Ottenere il percorso completo per il servizio di Windows

Come posso trovare la cartella in cui il file .exe del servizio Windows è installato dynamicmente?

Path.GetFullPath(relativePath); 

restituisce un percorso basato sulla C:\WINDOWS\system32 .

Tuttavia, il metodo XmlDocument.Load(string filename) sembra funzionare contro il percorso relativo all’interno della directory in cui è installato il file .exe del servizio.

Provare

 System.Reflection.Assembly.GetEntryAssembly().Location 

Prova questo:

 AppDomain.CurrentDomain.BaseDirectory 

(Proprio come qui: Come trovare il percorso exe di Windows )

 Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) 

Questo funziona per il nostro servizio Windows:

 //CommandLine without the first and last two characters //Path.GetDirectory seems to have some difficulties with these (special chars maybe?) string cmdLine = Environment.CommandLine.Remove(Environment.CommandLine.Length - 2, 2).Remove(0, 1); string workDir = Path.GetDirectoryName(cmdLine); 

Questo dovrebbe darti il ​​percorso assoluto dell’eseguibile.

Un’altra versione di cui sopra:

 string path = Assembly.GetExecutingAssembly().Location; FileInfo fileInfo = new FileInfo(path); string dir = fileInfo.DirectoryName; 

Environment.CurrentDirectory restituisce la directory corrente in cui è in esecuzione il programma. In caso di servizio Windows, restituisce il percorso% WINDIR% / system32 in cui verrà eseguito l’eseguibile piuttosto che il file eseguibile distribuito.

Questo dovrebbe darti il ​​percorso in cui risiede l’eseguibile:

 Environment.CurrentDirectory; 

Altrimenti, potresti provare:

 Directory.GetParent(Assembly.GetEntryAssembly().Location).FullName 

Un modo più hacky, ma funzionale:

 Path.GetFullPath("a").TrimEnd('a') 

🙂