2017-03-23 2 views
0

Ich habe eine Software erstellt, die ein Programm in meinem AppData-Ordner startet.Starten eines Programms mit dynamischen Pfad in C#

Was ich jedoch tun wollte, ist es mit einem dynamischen Pfad laufen zu lassen.

Der Strompfad I verwendet wird:

new ProcessStartInfo(@"C:\Users\user\AppData\Local\SOFTWAREPROGRAM\File\program.exe") 

Ich möchte es aber es möglich machen, auf ‚Benutzer‘ nicht nur laufen, sondern auf alle Benutzer mit dem AppData-Ordner. Ich habe versucht, den folgenden Pfad (das funktioniert, wenn in den Verzeichnissen Surfen):

new ProcessStartInfo(@"%USERPROFILE%\AppData\Local\SOFTWAREPROGRAM\File\program.exe") 

Damit aber ich erhalte die ‚Datei found'-Fehler nicht.

Wie würde ich das korrigieren? Ich möchte, dass es bei verschiedenen Benutzern funktioniert.

EDIT

Die Antwort in meinem Programm funktioniert, aber im Dienst funktioniert nicht ich zu entwickeln bin versucht. Ich habe versucht:

(die Antwort)

new ProcessStartInfo(Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\AppData\Local\SOFTWAREPROGRAM\File\program.exe")) 

und

string folder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
string specificFile = Path.Combine(folder, @"\Local\SOFTWAREPROGRAM\File\program.exe"); 

ProcessStartInfo(specificFile) 

Dieses in einem Programm (Konsolenprojekt) funktioniert, aber nicht in einem Service. Warum ist das?

I Ausgang des specificFile beim Laufen, aber es enthält nur \Local\SOFTWAREPROGRAM\File\program.exe

+2

Mögliche Duplikat [Wie kann ich den Pfad des aktuellen Benutzers „Application Data“ Ordner bekommen?] (Http://stackoverflow.com/questions/915210/how-can-i-get-the- Pfad des aktuellen Benutzer-Anwendungsdaten-Ordners) – ASh

+2

Die Zeichenfolge durch Environment.ExpandEnvironmentVariables –

+0

ausführen Die Absicht dieses Ordners ist es, Anwendungsdaten zu speichern, nicht die Anwendung selbst. – Crowcoder

Antwort

3

Sie Environment.ExpandEnvironmentVariables Methode können Sie den tatsächlichen Pfad aus den Umgebungsvariablen erhalten.

new ProcessStartInfo(Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\AppData\Local\SOFTWAREPROGRAM\File\program.exe")) 
+0

Vielen Dank! –

+0

Pavel, ich habe den Code in meinem Dienst bearbeitet, aber Ihre Methode scheint nicht in Diensten zu funktionieren? –

+0

Welches Konto verwenden Sie zum Ausführen? In der Regel werden Dienste unter einem speziellen Systemkonto ausgeführt, z. Lokaler Service oder Netzwerkdienst. Sie können jedoch jedes Windows-Konto angeben, um es auszuführen. – Pavel

Verwandte Themen