Prozess.Dateiname mit %temp starten%
-
12-12-2019 - |
Frage
Aus irgendeinem seltsamen Grund schlägt dieser Code fehl:
p.StartInfo.FileName = @"%temp%\SSCERuntime_x86-ENU.msi";
und dieser Code ist erfolgreich:
p.StartInfo.FileName = @"C:\Users\USERNAME\AppData\Local\Temp\SSCERuntime_x86-ENU.msi";
Gibt es einen Grund, warum ich vermisse?
Beachten Ich habe gerade den Pfad kopiert, ich glaube nicht, dass der Rest des Codes benötigt wird, aber ich werde ihn trotzdem einfügen:
Process p = new Process();
p.StartInfo.FileName = @"%temp%\SSCERuntime_x86-ENU.msi";
p.StartInfo.Arguments = "/passive";
p.Start();
Lösung
Der Process
Klasse erweitert Zeichenfolgen nicht mit Umgebungsvariablen (z. %temp%
).
Wenn Sie Umgebungsvariablen verwenden möchten, um das zu erstellen FileName
Eigenschaft dann müssen Sie die Umgebungsvariablen abrufen (mit dem GetEnvironmentVariable
Methode auf der Environment
Klasse) und führen Sie die Ersetzung selbst durch, so:
// Construct the path.
string temp = Environment.GetEnvironmentVariable("temp");
string path = Path.Combine(temp, "SSCERuntime_x86-ENU.msi");
// Launch the process.
Process p = new Process();
p.StartInfo.FileName = path;
p.StartInfo.Arguments = "/passive";
p.Start();
Zusätzlich können Sie die ExpandEnvironmentVariables
Methode mit deiner Originalsaite so:
p.StartInfo.FileName =
Environment.ExpandEnvironmentVariables(@"%temp%\SSCERuntime_x86-ENU.msi");
Andere Tipps
Der %temp%
ein Teil der Zeichenfolge wird wörtlich interpretiert, anstatt durch die entsprechende Umgebungsvariable ersetzt zu werden.Sie müssen es manuell erweitern
var temp = Environment.GetEnvironmentVariable("temp");
var fileName = Path.Combine(temp, "SSCERuntime_x86-ENU.msi");
p.StartInfo.FileName = fileName;
% TEMP% wird von der Befehlshülle analysiert und ausgewertet.Sie können Verwendung von path.gettempath () verwendenund path.comBine zu diesem Zweck.
generasacodicetagpre.Sie können das verwenden Environment.ExpandEnvironmentVariables
um Umgebungsvariablen innerhalb einer Zeichenfolge zu erweitern, übergeben Sie diese an die Process
Klasse:
p.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%temp%\SSCERuntime_x86-ENU.msi");
Dies hat die zusätzlichen Vorteile von
- Funktioniert für jede Umgebungsvariable (% APPDATA%,% COMMONPROGRAMFILES% usw.) und
- Arbeiten an einer beliebigen Stelle in der Zeichenfolge (z."%temp%\%Benutzername%\foo.txt")
Versuchen Sie das:
generasacodicetagpre.dann concat es in:
generasacodicetagpre.casper schlägt mich mit der Erklärung in den Schlag, aber das Prozess.Start-Verfahren behandelt es grundsätzlich buchstäblich, anstatt sie intrasperting, als die Hülle würde.