Utilisateur anonyme
-
9 août 2013 à 19:03
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
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 ;)
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 !
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
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