process.start启动exe两次

时间:2014-12-07 15:45:51

标签: vb.net winforms process.start

我希望这是有人可以帮我解决的问题。我正在尝试使用Windows窗体中的Cisco AnyConnect内置工具运行DART捆绑包。当我使用Process.Start或System.Diagnostics.Process.Start调用exe时,在单击事件中它会复制命令。然后我让这个过程同时运行两次。使用Process.Start,我可以毫无问题地调用Cisco Connection GUI。代码如下。还有一种方法可以延迟MsgBox("文本写入文件")直到DART Bundle完成之后?

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

2 个答案:

答案 0 :(得分:1)

可能是,Process start没有被调用两次,但事件被触发了两次。 放置一个断点并检查它。 如果是,那么您可以轻松地在调用堆栈中找到问题。

而且,是的,你可以延迟消息。 据我所知,这个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");
}

答案 1 :(得分: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

感谢大家的时间和帮助!