2017-09-04 9 views
0

Azure에서 스토리지 계정을 백업하는 프로그램을 만들었습니다. 이렇게하려면 AzCopy를 사용하고 있습니다. 스토리지 계정에 4 개의 컨테이너가 있으며 모든 컨테이너를 가져 오기 위해 내 스토리지 계정을 통해 foreach을 수행합니다. 내 첫 번째 컨테이너는 업로드 한 후에 내 foreach의 다음 컨테이너로 이동하여 내용을 업로드하려고 시도하자마자 바로 백업됩니다. 이로 인해 충돌이 발생합니다. [WARNING] Incomplete operation with different command line detected at the journal directory.계속 진행하기 전에 AzCopy가 파일 업로드까지 대기합니다.

"저널"은 AzCopy에서 만든 임시 파일입니다.

첫 번째 컨테이너가 완료되기 전에 두 번째 컨테이너를 업로드하려고했기 때문에이 문제가 발생했다고 생각합니다. 두 번째 컨테이너를 업로드하기 전에 첫 번째 컨테이너의 모든 내용이 업로드 될 때까지 기다려야합니까? 당신은 프로세스 종료 때까지 기다릴 필요가

var AzCopyProcess = new ProcessStartInfo 
          { 
           FileName = "cmd.exe", 
           RedirectStandardInput = true, 
           RedirectStandardOutput = true, 
           UseShellExecute = false, 

           WindowStyle = ProcessWindowStyle.Normal 

          }; 

          var process = new Process { StartInfo = AzCopyProcess }; 
          process.Start(); 

          process.StandardInput.WriteLine([email protected]"cd {strCommand}"); 
          Console.WriteLine("Found directory"); 
          process.StandardInput.WriteLine([email protected]"AzCopy.exe"); 
          Console.WriteLine("Found exe"); 
          process.StandardInput.WriteLine($"AzCopy /Source:{pslFileStore.Uri} /Dest:{dayBlob.Uri} /SourceKey:{pslFileStoreKey.ToString()} /DestKey:{pslFileStoreBackUpKey.ToString()} /S"); 
          process.BeginOutputReadLine(); 
          Console.WriteLine($"Backed up "); 

답변

0

프롬프트 내 명령에 대해 다음과 같이

내 코드입니다. 이 방법을 호출하는 것으로 충분합니다.

process.WaitForExit(); 

이 방법으로 문제가 해결되지 않으면 다른 방법을 시도해보십시오. 명령에 시작 부분에 "\의 C '를 추가합니다. WaitForExit()입니다하지 이러한 경우에 필요합니다.

var AzCopyProcess = new ProcessStartInfo 
{ 
    FileName = "cmd.exe", 
    RedirectStandardInput = true, 
    RedirectStandardOutput = true, 
    UseShellExecute = false, 

    WindowStyle = ProcessWindowStyle.Normal 
    Arguments = $"/C {strCommand}/AzCopy.exe /Source:{pslFileStore.Uri} /Dest:{dayBlob.Uri} /SourceKey:{pslFileStoreKey.ToString()} /DestKey:{pslFileStoreBackUpKey.ToString()} /S" 
}; 

var process = new Process { StartInfo = AzCopyProcess }; 
process.Start(); 
Console.WriteLine($"Backed up "); 

/C

우리가 명령 한 후 종료를 실행할 것을 알려줍니다.

+0

감사합니다 당신의 대답을 위해 그러나 내가이 코드 줄에 넣을 때 멈출 때까지 그냥 매달렸다. 일반적으로 내가 다시 컨테이너에 약 2 분 걸리지 만 나는 5 개 이상 기다리고 있었고 여전히 매달려 있었다. 없습니까? –

+0

@CraigGallagher 흠, 편집 된 답변보기 어쩌면 두 번째 해결책이 도움이 될 것입니다 –

+0

\ C는 인식 할 수없는 이스케이프 시퀸입니다 ce –