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')
🙂