2014-12-07 3 views
0

누군가가 해결할 수 있기를 바랍니다. Windows Form에서 Cisco AnyConnect Built in 도구를 사용하여 DART Bundle을 실행하려고합니다. exe를 호출 할 때 Click 이벤트에서 Process.Start 또는 System.Diagnostics.Process.Start를 사용하여 명령을 복제합니다. 그런 다음 프로세스가 동시에 두 번 실행됩니다. Process.Start를 사용하여 문제없이 Cisco Connection GUI를 호출 할 수 있습니다. 코드는 다음과 같습니다. 또한 DART 번들이 완료 될 때까지 MsgBox ("파일에 쓰는 텍스트")를 지연시키는 방법이 있습니까?process.start가 exe를 두 번 실행합니다.

Private Sub Button6_Click(sender As Object, e As RoutedEventArgs) Handles Button7.Click 
     System.Diagnostics.Process.Start("C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\dart\dartcli.exe") 
     MsgBox("Text written to file") 
     Button7.Background = System.Windows.Media.Brushes.Green 
    End Sub 

답변

0

그래서 내가 왜이 문제를 겪고 있는지 알 것 같습니다. 버튼을 만들었을 때 클릭 이벤트 이름에 오류가 발생했습니다 (우연히 이름이 복제 됨) Visual Studio Express에서 자동으로 문제를 해결했습니다. 버튼이 코드를 두 번 호출하게하는 버튼 클릭 이벤트의 끝에 처리기를 추가했습니다. 핸들러를 제거하고 두 번 호출을 중지했습니다.

나는이이

Private Sub Button6_Click(sender As Object, e As RoutedEventArgs) Handles Button7.Click 
    System.Diagnostics.Process.Start("C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\dart\dartcli.exe") 
    MsgBox("Text written to file") 
    Button7.Background = System.Windows.Media.Brushes.Green 
End Sub 

에서 갔다. 문제가 해결되었습니다

Private Sub Button6_Click(sender As Object, e As RoutedEventArgs) 
    System.Diagnostics.Process.Start("C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\dart\dartcli.exe") 
    MsgBox("Text written to file") 
    Button7.Background = System.Windows.Media.Brushes.Green 
End Sub 

시간을내어 도와 주신 모든 분들께 감사드립니다!

1

아마도 프로세스 시작은 두 번 호출되지 않지만 이벤트는 두 번 발생합니다. 중단 점을 배치하고 확인하십시오. 그렇다면 호출 스택에서 문제를 쉽게 찾을 수 있습니다.

그리고 예, 메시지를 지연시킬 수 있습니다. 제가 알고 있듯이이 DART Bundle은 데이터를 파일로 출력하고 종료합니다.

따라서 다음 코드를 사용하여 문제를 해결할 수 있습니다. C#이지만 VB.NET에서는 같거나 유사해야합니다.

Process.Start("C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\dart\dartcli.exe"); 
Process.WaitForExit(); 
MessageBox.Show("Text written to file."); 

WaitForExit()은 프로세스가 종료 될 때까지 동시에 대기합니다. 또는 응용 프로그램을 차단하지 않으려면 Process.Exited 이벤트에 가입 할 수 있습니다.

private void YourMethod() 
{ 
    Process process = new Process(); 
    process.StartInfo.FileName = "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\dart\dartcli.exe"; 
    process.Exited += new EventHandler(Process_Exited); 
    process.Start(); 
} 

private void Process_Exited(object sender, EventArgs e) 
{   
    MessageBox.Show("Text written to file"); 
} 
+0

나는 중단 점을 넣었고 단추 색상이 변경된 후 단추 이벤트를 다시 시작한다는 것을 알았습니다. 중단은'Button7.Background.System.Windows.Media.Brushes.Green'에서 멈추고 계속을 클릭하면 dartcli.exe가 다시 시작됩니다. 이 문제를 해결하기 위해 호출 스택을 어떻게 찾을 수 있습니까? 나를 용서해주십시오. VB에서 프로그래밍을 처음 접하다. 감사합니다 – LordDaius

+0

사실 저는이 방법으로 명령을 다시 작성하려고 시도했습니다. 'System.Diagnostics.Process = System.Diagnostics.Process.Start ("C : \ Program Files (x86) \ Cisco \ Cisco AnyConnect Secure Mobility Client \ dart \ dartcli.exe ") dart.WaitForExit()'하지만 여전히 이벤트를 두 번 실행합니다. 또한 전체 양식을 다시 호출합니다. 이제 프로세스가 화면에 두 번 및 두 번 실행됩니다. – LordDaius

+0

@LordDaius 전체 양식 .cs 및 .designer.cs 파일을 업로드 할 수 있습니까? pastebin.com을 사용하면됩니다. –