none
PING qui fait bugger l'application si l'ordinateur concerné est eteint RRS feed

  • Question

  •  

    j'ai fait une petite application avec visual basic 2008 express edition et une de ses fonctions permet de savoir si un pc est allumé (il s'appelle ceres2 (quel beau nom)). Ce PC partage en réseau un scanner et je voudrais pouvoir verifier a distance que ce pc est allumé. Lorsqu'il est allumé une boite de dialogue dit "ceres2 est allumé mais lorsqu'il est etein cela fait une erreur de l'application (normalement je veux qu'elle affiche "ceres 2 n'est pas disponible".

     

    voici un extrait de la partie du code concernée :

     

     

    code

    Dim siteResponds As Boolean = False

    siteResponds = My.Computer.Network.Ping("Ceres2")

     

    If siteResponds = My.Computer.Network.Ping("Ceres2") = True And WebBrowser1.CanSelect Then

    Dialog4.Show()

    End If

     

    If siteResponds = My.Computer.Network.Ping("Ceres2") = False And WebBrowser1.CanSelect Then

    Dialog5.Show()

    End If

     

     

    details : la partie "WebBrowser1.CanSelect" c'est juste pour faire une hypothese mais juste la partie

    - "If siteResponds = My.Computer.Network.Ping("Ceres2") = True"

    - "Then Dialog4.Show()"

    m'interessent.

     

    comment eviter de faire bugger l'application si Ceres2 est etein et donc qu'il affiche la boite de dialogue "ceres 2 n'est pas disponible"?

    lundi 31 mars 2008 20:30

Toutes les réponses

  • Bonjour,

    Je ne connais pas le vb2008 mais as-tu essayé de mettre ton code dans un "try catch" ?

     

    Code Snippet

    Dim siteResponds As Boolean = False
    siteResponds = My.Computer.Network.Ping("Ceres2")
    Try

            My.Computer.Network.Ping("Ceres2")
            siteResponds = True
     Catch ex As Exception
             siteResponds = False
    End Try
    If siteResponds = True And WebBrowser1.CanSelect Then
           Dialog4.Show()
    End If
    If siteResponds = False And WebBrowser1.CanSelect Then
           Dialog5.Show()
    End If

     

     

    mardi 1 avril 2008 10:09
  • C'est dommage ca ne corrige pas le bug. Voulez vous plus d'informations sur l'erreur ?

    mercredi 2 avril 2008 13:30
  •  

    Voui pourquoi pas mais je ne sais pas qi je serai d'une grande aide...

    Bon courage quand même Wink

    mercredi 2 avril 2008 14:03
  • merci quand meme.
    mercredi 2 avril 2008 14:16
  •  

    Re,

     

    C'est quand même mieux de mettre des informations sur l'erreur car même si je ne peux pas vous aider, quelqu'un d'autre peut peut-être vous aider.

    jeudi 3 avril 2008 15:10
  • voici les details de l'exeption :

    L'exception System.Net.NetworkInformation.PingException n'a pas été gérée
      Message="Une exception s'est produite lors d'une demande PING."
      Source="System"
      StackTrace:
           à System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout, Byte[] buffer, PingOptions options)    à System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout, Byte[] buffer)    à Microsoft.VisualBasic.Devices.Network.Ping(String hostNameOrAddress, Int32 timeout)    à Microsoft.VisualBasic.Devices.Network.Ping(String hostNameOrAddress)    à navigateur_de_base_par_IE1.Form1.LinkLabel3_LinkClicked(Object sender, LinkLabelLinkClickedEventArgs e) dans C:\Users\Bastien\Documents\mes programmes visual basic\web browser de base\navigateur de base par IE1 modifié\navigateur de base par IE1 modifié\Form1.vb:ligne 81    à System.Windows.Forms.LinkLabel.OnLinkClicked(LinkLabelLinkClickedEventArgs e)    à System.Windows.Forms.LinkLabel.OnMouseUp(MouseEventArgs e)    à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)    à System.Windows.Forms.Control.WndProc(Message& m)    à System.Windows.Forms.Label.WndProc(Message& m)    à System.Windows.Forms.LinkLabel.WndProc(Message& msg)    à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)    à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)    à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)    à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)    à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)    à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)    à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)    à System.Windows.Forms.Application.Run(ApplicationContext context)    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)    à navigateur_de_base_par_IE1.My.MyApplication.Main(String[] Args) dans 17d14f5c-a337-4978-8281-53493378c1071.vb:ligne 81    à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)    à System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)    à System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)    à System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()    à System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)    à System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)    à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()    à System.Threading.ThreadHelper.ThreadStart_Context(Object state)    à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)    à System.Threading.ThreadHelper.ThreadStart()
      InnerException: System.Net.Sockets.SocketException
           ErrorCode=11001
           Message="Hôte inconnu"
           NativeErrorCode=11001
           Source="System"
           StackTrace:
                à System.Net.Dns.GetAddrInfo(String name)    à System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)    à System.Net.Dns.GetHostAddresses(String hostNameOrAddress)    à System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout, Byte[] buffer, PingOptions options)
           InnerException:

    jeudi 3 avril 2008 18:20
  • voici les details de l'exeption :

    L'exception System.Net.NetworkInformation.PingException n'a pas été gérée
      Message="Une exception s'est produite lors d'une demande PING."
      Source="System"
      StackTrace:
           à System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout, Byte[] buffer, PingOptions options)    à System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout, Byte[] buffer)    à Microsoft.VisualBasic.Devices.Network.Ping(String hostNameOrAddress, Int32 timeout)    à Microsoft.VisualBasic.Devices.Network.Ping(String hostNameOrAddress)    à navigateur_de_base_par_IE1.Form1.LinkLabel3_LinkClicked(Object sender, LinkLabelLinkClickedEventArgs e) dans C:\Users\Bastien\Documents\mes programmes visual basic\web browser de base\navigateur de base par IE1 modifié\navigateur de base par IE1 modifié\Form1.vb:ligne 81    à System.Windows.Forms.LinkLabel.OnLinkClicked(LinkLabelLinkClickedEventArgs e)    à System.Windows.Forms.LinkLabel.OnMouseUp(MouseEventArgs e)    à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)    à System.Windows.Forms.Control.WndProc(Message& m)    à System.Windows.Forms.Label.WndProc(Message& m)    à System.Windows.Forms.LinkLabel.WndProc(Message& msg)    à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)    à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)    à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)    à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)    à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)    à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)    à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)    à System.Windows.Forms.Application.Run(ApplicationContext context)    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)    à navigateur_de_base_par_IE1.My.MyApplication.Main(String[] Args) dans 17d14f5c-a337-4978-8281-53493378c1071.vb:ligne 81    à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)    à System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)    à System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)    à System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()    à System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)    à System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)    à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()    à System.Threading.ThreadHelper.ThreadStart_Context(Object state)    à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)    à System.Threading.ThreadHelper.ThreadStart()
      InnerException: System.Net.Sockets.SocketException
           ErrorCode=11001
           Message="Hôte inconnu"
           NativeErrorCode=11001
           Source="System"
           StackTrace:
                à System.Net.Dns.GetAddrInfo(String name)    à System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)    à System.Net.Dns.GetHostAddresses(String hostNameOrAddress)    à System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout, Byte[] buffer, PingOptions options)
           InnerException:

    jeudi 3 avril 2008 18:20
  • Le code:

    If my.computer.network.ping"(URL DU SITE OU IP") then 

    ...

    else

    ...

    Merci de dire ke ma réponse est utile si je t'ai répondu


    Theodore Morgado

    mercredi 7 novembre 2012 17:33
  • Bonjour,

    Apparemment quand le PC est éteint son nom n'est même pas connu ce qui génère une erreur. Je soupçonne que le code indiqué précédemment ne résoud pas le problème car on fait encore un ping en dehors du try/catch... Cela serait donc plutôt :

    Dim siteResponds As Boolean = False
    ' A SUPPRIMER : siteResponds = My.Computer.Network.Ping("Ceres2")
    Try
     
            My.Computer.Network.Ping("Ceres2")
            siteResponds = True
     Catch ex As Exception
             siteResponds = False
    End Try
    If siteResponds = True And WebBrowser1.CanSelect Then
           Dialog4.Show()
    End If
    If siteResponds = False And WebBrowser1.CanSelect Then
           Dialog5.Show()
    End If
    
    Personnellement plutôt que de voir si le PC est joignable avant d'utiliser le scanner, j'essaierai d'utiliser le scanner et si cela ne marche pas c'est que le poste n'est pas joignable (techniquement parlant, il est possible de désactiver le ping alors que le scanner sera toujours utilisable et le ping peut fonctionner alors que le scanner ne sera pas utilisable donc autant tester que ce que l'on veut faire fonctionne plutôt que de tester si autre chose fonctionne en supposant que du coup ce qu'on veut réellement faire fonctionnera).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Proposé comme réponse Lyamine mercredi 7 novembre 2012 18:08
    mercredi 7 novembre 2012 17:51
    Modérateur
  • Bonjour,

    Apparemment quand le PC est éteint son nom n'est même pas connu ce qui génère une erreur. Je soupçonne que le code indiqué précédemment ne résoud pas le problème car on fait encore un ping en dehors du try/catch... Cela serait donc plutôt :

    Dim siteResponds As Boolean = False
    ' A SUPPRIMER : siteResponds = My.Computer.Network.Ping("Ceres2")
    Try
     
            My.Computer.Network.Ping("Ceres2")
            siteResponds = True
     Catch ex As Exception
             siteResponds = False
    End Try
    If siteResponds = True And WebBrowser1.CanSelect Then
           Dialog4.Show()
    End If
    If siteResponds = False And WebBrowser1.CanSelect Then
           Dialog5.Show()
    End If
    
    Personnellement plutôt que de voir si le PC est joignable avant d'utiliser le scanner, j'essaierai d'utiliser le scanner et si cela ne marche pas c'est que le poste n'est pas joignable (techniquement parlant, il est possible de désactiver le ping alors que le scanner sera toujours utilisable et le ping peut fonctionner alors que le scanner ne sera pas utilisable donc autant tester que ce que l'on veut faire fonctionne plutôt que de tester si autre chose fonctionne en supposant que du coup ce qu'on veut réellement faire fonctionnera).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    Bonjour,

    Je suis d'accord avec Patrice. Si le pare-feu bloque le ping, ca ne veut pas dire que le scanner n'est pas joignable. En ce qui concerne le code plus haut avec try/catch, je pense qu'il a oublié de supprimer le début.

     

    Cordialement


    Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !

    mercredi 7 novembre 2012 18:10