문제

어떤 이상한 이유에 대해이 코드는 실패합니다:

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");

이것은 추가적인 이점을 가지고 있습니다.

  1. 모든 환경 변수에 대한 작업(%앱 데이터%,%공통 프로그램 파일%등)및
  2. 문자열의 어느 곳에서나 작업(예:"%온도%\%사용자 이름%\푸.")

시도 :

string tempPath = Environment.GetEnvironmentVariable("Temp");
.

다음에 Concat :

p.StartInfo.FileName = Path.Combine(tempPath, "SSCERuntime_x86-ENU.msi"); 
.

캐스퍼는 나를 펀치에 이길 수 있지만, 공정 .Start 방법은 기본적으로 쉘로 껍질을 벗기는 대신 문자 그대로 처리합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top