과정.%온도를 사용하여 파일 이름 시작%
-
12-12-2019 - |
문제
어떤 이상한 이유에 대해이 코드는 실패합니다:
p.StartInfo.FileName = @"%temp%\SSCERuntime_x86-ENU.msi";
그리고 이 코드는 성공합니다:
p.StartInfo.FileName = @"C:\Users\USERNAME\AppData\Local\Temp\SSCERuntime_x86-ENU.msi";
내가 누락 된 이유가 있습니까?
참고 난 그냥 경로를 복사,나는 코드의 나머지 부분이 필요하다고 생각하지 않지만 어쨌든 넣어 것입니다:
Process p = new Process();
p.StartInfo.FileName = @"%temp%\SSCERuntime_x86-ENU.msi";
p.StartInfo.Arguments = "/passive";
p.Start();
해결책
Process
클래스 삭제를 확장하지 않습니다. 환경 변수 (즉, %temp%
).
환경 변수를 사용하여 FileName
속성 그런 다음 환경 변수를 가져와야합니다 ( "Nofollow"> GetEnvironmentVariable
클래스 ) 및 수행하기 자신을 대체하는 것과 같이 대체 :
// 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();
.
또한 Environment
메소드를 사용할 수 있습니다 원래 문자열과 같은 원래 문자열로 :
p.StartInfo.FileName =
Environment.ExpandEnvironmentVariables(@"%temp%\SSCERuntime_x86-ENU.msi");
. 다른 팁
그만큼 %temp%
문자열의 일부는 적절한 환경 변수로 대체되는 대신 문자 그대로 해석됩니다.수동으로 확장해야 합니다.
var temp = Environment.GetEnvironmentVariable("temp");
var fileName = Path.Combine(temp, "SSCERuntime_x86-ENU.msi");
p.StartInfo.FileName = fileName;
% temp %는 명령 쉘에 의해 구문 분석되어 평가됩니다. Path.GetTempPath ()를 사용할 수 있습니다. 및 PATHCOMBINE 이 목적을 위해
p.StartInfo.FileName = Path.Combine(Path.GetTempPath(), @"SSCERuntime_x86-ENU.msi");
. 당신은 사용할 수 있습니다 Environment.ExpandEnvironmentVariables
문자열 내의 환경 변수를 확장하려면, Process
클래스:
p.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%temp%\SSCERuntime_x86-ENU.msi");
이것은 추가적인 이점을 가지고 있습니다.
- 모든 환경 변수에 대한 작업(%앱 데이터%,%공통 프로그램 파일%등)및
- 문자열의 어느 곳에서나 작업(예:"%온도%\%사용자 이름%\푸.")
시도 :
string tempPath = Environment.GetEnvironmentVariable("Temp");
.
다음에 Concat :
p.StartInfo.FileName = Path.Combine(tempPath, "SSCERuntime_x86-ENU.msi");
.
캐스퍼는 나를 펀치에 이길 수 있지만, 공정 .Start 방법은 기본적으로 쉘로 껍질을 벗기는 대신 문자 그대로 처리합니다.
제휴하지 않습니다 StackOverflow