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();
War es hilfreich?

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

  1. Funktioniert für jede Umgebungsvariable (% APPDATA%,% COMMONPROGRAMFILES% usw.) und
  2. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top