Fichier hosts en cours d'utilisation [Résolu]

- - Dernière réponse :  Utilisateur anonyme - 23 août 2013 à 11:48
Bonjour,
je voudrais ajouter des sites à bloquer au fichier hosts (un très grand nombre de site, plus de 85 000 minimum).
Je suis donc obligé de désactiver le service "Dnscache" car la navigation devient impossible aussi non.
Le problème n'est pas là, en effet lors de l'ajout de toutes ces lignes, j'ai un message d'erreur comme quoi le fichier hosts est en cours d'utilisation. C'est bien une erreur de mon code mais je ne vois pas d'où cela peut venir. J'espère que quelqu'un verra le problème qui est présent dans mon code.
Merci.
    Private Sub ButtonPatcherHosts_Click(sender As Object, e As EventArgs) Handles ButtonPatcherHosts.Click, ButtonPatcherHosts.Click
        Dim ThreadPatcherHosts As New Threading.Thread(AddressOf PatcherHosts)
        ThreadPatcherHosts.Start()
    End Sub


 If CheckBoxBloquerSitesDangereux.Checked Then
            Try
                Dim StreamReaderHosts As New StreamReader("C:\Windows\System32\Drivers\etc\hosts")
                Dim StreamReaderListe As New StreamReader("C:\Users\Clément\Documents\ListeDeSiteContenusDangereux.txt")
                Dim ligne As String
                Dim ligneExistante As String = StreamReaderHosts.ReadToEnd
                StreamReaderHosts.Close()
                Dim sw As StreamWriter = New StreamWriter("C:\Windows\System32\Drivers\etc\hosts", True)
                Do
                    ligne = StreamReaderListe.ReadLine
                    'on verifie si ligne n'est pas vide 
                    If ligne = String.Empty Then
                        sw.Close()
                        Exit Do
                    End If
                    If Not ligneExistante.Contains(ligne) Then
                        sw.WriteLine(ligne)
                    End If
                Loop Until ligne Is Nothing
                StreamReaderListe.Close()
            Catch ex As Exception
                MessageBox.Show(ex.ToString)
            End Try
        End If

        If CheckBoxBloquerSitesPublicitaires.Checked Then
            Try
                Dim StreamReaderHosts As New StreamReader("C:\Windows\System32\Drivers\etc\hosts")
                Dim StreamReaderListe As New StreamReader("C:\Users\Clément\Documents\ListeDeSiteContenusPublicitaires.txt")
                Dim ligne As String
                Dim ligneExistante As String = StreamReaderHosts.ReadToEnd
                StreamReaderHosts.Close()
                Dim sw As StreamWriter = New StreamWriter("C:\Windows\System32\Drivers\etc\hosts", True)
                Do
                    ligne = StreamReaderListe.ReadLine
                    'on verifie si ligne n'est pas vide 
                    If ligne = String.Empty Then
                        sw.Close()
                        Exit Do
                    End If
                    If Not ligneExistante.Contains(ligne) Then
                        sw.WriteLine(ligne)
                    End If
                Loop Until ligne Is Nothing
                StreamReaderListe.Close()
            Catch ex As Exception
                MessageBox.Show(ex.ToString)
            End Try
        End If

        If CheckBoxBloquerSitesCaracteresSexuels.Checked Then
            Try
                Dim StreamReaderHosts As New StreamReader("C:\Windows\System32\Drivers\etc\hosts")
                Dim StreamReaderListe As New StreamReader("C:\Users\Clément\Documents\ListeDeSiteCaracteresSexuels.txt")
                Dim ligne As String
                Dim ligneExistante As String = StreamReaderHosts.ReadToEnd
                StreamReaderHosts.Close()
                Dim sw As StreamWriter = New StreamWriter("C:\Windows\System32\Drivers\etc\hosts", True)
                Do
                    ligne = StreamReaderListe.ReadLine
                    'on verifie si ligne n'est pas vide 
                    If ligne = String.Empty Then
                        sw.Close()
                        Exit Do
                    End If
                    If Not ligneExistante.Contains(ligne) Then
                        sw.WriteLine(ligne)
                    End If
                Loop Until ligne Is Nothing
                StreamReaderListe.Close()
            Catch ex As Exception
                MessageBox.Show(ex.ToString)
            End Try
        End If

    End Sub
Afficher la suite 

4 réponses

0
Merci
Salut,

L'erreur est sur la toute première ligne de ton premier code. (doublon sur ButtonPatcherHosts.Click).
Si mes souvenirs sont bons, ce n'est pas la première fois que ça t'arrive ;)

A bientôt.
0
Merci
Salut banana :)
Effectivement, le code s'exécute deux fois et ce n'est pas la première fois, cependant le problème persiste. Je me demande si ce n'est pas le service Dnscache qui lit le hosts du coup il l'occupe.

J'ai peut être deux pistes pour savoir d'où vient le problème, la première est l'état du service "Dnscache" que je suis obligé d'arrêter sinon la connexion est impossible en fonction du nombre de sites bloqués. Mais c'est bizarre car sur ma machine virtuelle avec Windows 7 je n'y avait pas touché et ça ne fonctionne pas quand même. (Après avoir utilisé le logiciel et bidouillé le service, il m'est impossible de le changer d'état sur Windows 8)

Le deuxième problème serait la mauvaise fermeture du hosts car je ne peux même plus le modifier manuellement après avoir utilisé mon logiciel et encore une fois le service bidouillé et je suis obligé de démarrer ne sans échec pour le modifier (Dnscache ne marche pas en sans échec me semble t-il d'où la possibilité de modifier le hosts tranquillement ...), arggg j'ai l'impression que les deux sont liés, c'est un vrai casse tête cette histoire !
0
Merci
Petit élément nouveau, j'ai remarqué que si je démarre mon PC avec les lignes au fichier hosts ajouté, ainsi que le service Dnscache démarré, je ne peux plus modifier le hosts même manuellement car occupé.
Edit : Encore un nouvel élément :p J'ai désactivé le démarrage du service Dnscache (comme je l'avais déjà fais une fois), redémarré mon PC et réessayé mon logiciel, et ça fonctionne !!!!!!!
Je poursuis mes tests dans la soirée sur plusieurs PC viendrais conclure le sujet ou redemander de l'aide :p
0
Merci
Bonjour,
j'ai réussi à résoudre mon problème, il faut absolument que le service "Dnscache" soit arrêté et désactivé car c'est lui qui lit le fichier hosts. Il ralentit donc la connexion si il est activé, de plus le fichier hosts sera inaccessible.
Je vous donne donc le code pour l'arrêter et le désactiver si ça intéresse quelqu'un.
Try
            Dim Service As New ServiceController()
            Service.MachineName = "."
            Service.ServiceName = "Dnscache"
            Service.Stop()
            Dim Nkey As RegistryKey = Registry.LocalMachine
            Dim valKey As RegistryKey = Nkey.OpenSubKey("System\ControlSet001\Services\Dnscache", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl)
            valKey.SetValue("Start", Convert.ToInt32(4), RegistryValueKind.DWord)
            valKey.Close()
        Catch ex As Exception
        End Try

Merci de l'aide que vous m'avez apporté !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.