2016-07-28 5 views
0

프로세스 중에 사용자가 7za.exe 창을 닫지 못하도록하는 방법이 있습니까? 폴더 추출을 진행해야하지만 사용자가 창을 닫으면 C# 프로그램에서 오류가 발생할 수 있습니다.프로세스가 완료 될 때까지 7za.exe 프로그램을 닫지 마십시오.

public partial class ExtractForm : Form 
{ 
    public ExtractForm() 
    { 
     InitializeComponent(); 
    } 

    private void ExtractForm_Load(object sender, EventArgs e) 
    { 
     InitializeEvent(); 
    } 

    private void InitializeEvent() 
    { 
     Zip.LogFileExtract +=WriteExtractProgression; 
    } 

    private void WriteExtractProgression(string text) 
    { 
     if (InvokeRequired) 
     { 
      this.BeginInvoke(new Action<string>(WriteExtractProgression), text); 
     } 
     else 
     { 
      txtExtract.Text += text; 
      txtExtract.SelectionStart = txtExtract.TextLength; 
      txtExtract.ScrollToCaret(); 
      txtExtract.Refresh(); 
     } 
    } 
} 

가공 방법 :

ExtractForm extractForm = new ExtractForm(); 
extractForm.Show(); 

Process zipProcess = new Process(); 
     using (zipProcess) 
     { 
      zipProcess.StartInfo.UseShellExecute = false;   //Show the cmd. 
      zipProcess.StartInfo.RedirectStandardOutput = true; 
      zipProcess.OutputDataReceived += (object sender, DataReceivedEventArgs outline) => 
      { 
       LogFileExtract(outline.Data); 
       // Add args to a TextBox, ListBox, or other UI element 
      }; 
      zipProcess.StartInfo.CreateNoWindow = true; 
      zipProcess.StartInfo.FileName = pathToZip; 
      zipProcess.StartInfo.Arguments = args; 
      zipProcess.Start(); 
      zipProcess.BeginOutputReadLine(); 
      zipProcess.WaitForExit(); //Wait the process to finish completely. 

     } 
     extractForm.Close(); 
    } 
+0

http://stackoverflow.com/questions/5377423/hide-console-window-from-process-start-c-sharp이 답변을 제공합니까? – Will

+0

아니요 콘솔 창을 원하지만 사용자가 직접 콘솔 창을 닫는 것을 원하지 않습니다. –

+0

그렇다면 당신은 아마 솔입니다. – Will

답변

1

당신이 그것을 시작하더라도, 콘솔 창 인 외부 창,의 폐쇄를 방지하는 직접적인 방법이 없습니다.

process.StartInfo.UseShellExecute = false; 
process.StartInfo.RedirectStandardOutput = true; 
process.OutputDataReceived += (sender, args) => 
{ 
    // Add args to a TextBox, ListBox, or other UI element 
} 
process.Start(); 
process.BeginOutputReadLine(); 

UI 요소를 통해 당신에게 직접 제어 할 줄 것이다 :이 특정 사용 케이스에 대한

, 당신은 같은 것을 사용하기 시작 프로세스의 출력을 캡처 할 수 있습니다. 보너스로 실행 중일 때 콘솔 창을 응용 프로그램에서 잃어 버릴 기회는 없습니다.

+0

네,하지만 프로세스가 몇 분 정도 지속될 수 있습니다. 콘솔 창을 표시하지 않으면 고객이 문제가 있는지 묻습니다. –

+0

정말 고객이 프로세스의 결과를 창에서 볼 수 없을 것입니다. 제어? 원한다면 TextBox를 콘솔 창처럼 막연하게 만들 수도 있습니다. –

+0

최고는 진행률 표시 줄을 만드는 것이지만 나는 7za 프로그램으로 할 수 있다고 생각하지 않습니다. 귀하의 코드를 통해 나는 진도를 얻을 수 있고 내가 보는 것처럼 내 winform에 쓸 수 있습니다. 아마 내가 할 수없는 최선이야. 고마워요 :) –