IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Fichier hosts en cours d'utilisation


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut Fichier hosts en cours d'utilisation
    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.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    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

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Bonjour,

    Tu devrais utiliser plutôt System.IO.File.ReadAllLines() et System.IO.File.AppendAllLines()

    Je regarde et je te dirais

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Ton message d'erreur ne concerne pas un fichier déjà ouvert, mais une interdiction d'écrire dans ce fichier sans droits d'administrateur.

    Si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim LignesLues() As String = System.IO.File.ReadAllLines("C:\Users\" & System.Environment.UserName & "\Documents\ListeDeSiteContenusDangereux.txt")
    System.IO.File.AppendAllLines("C:\users\" & System.Environment.UserName & "\desktop\hosts", LignesLues)
    Ca fonctionne parfaitement, si tu essayes d'écrire dans un fichier dans c:\windows\system32\drivers\etc\ tu ne peux pas le faire sans les droits.

    Regarde cette page:
    http://dotnet.developpez.com/tutorie...e-utilisateur/

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Re:

    Je viens de tester cette solution:
    http://social.msdn.microsoft.com/For...blme-de-droit-

    Et ça fonctionne bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim LignesLues() As String = System.IO.File.ReadAllLines("C:\Users\" & System.Environment.UserName & "\Documents\ListeDeSiteContenusDangereux.txt")
            System.IO.File.AppendAllLines("C:\Windows\System32\Drivers\etc\hosts_old", LignesLues)
        End Sub

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut
    Salut ACIVE_CS,
    déjà merci pour la simplification du code !
    J'avais déjà modifié la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    afin d'avoir les droits. Cependant, j'ai toujours la même erreur. J'ai oublié de préciser un détail très important, c'est que malgré le message d'erreur, les lignes s'ajoutent quand même.
    Je précise que je suis sous Windows 8, et je pense qu'en mettant la valeur "EnableLUA" à "0" cela fonctionnerait, mais je ne veux pas car les personnes qui utiliseront mon programme n'ont pas à faire de tels manipulations, de plus on ne peut plus ouvrir les applications provenant du Windows Store après.

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Salut Clement,

    Tu n'aurais pas oublié le bloc notes avec le fichier ouvert par hasard?
    Je dis n'importe quoi ça fonctionne même comme ça, ... je viens d'essayer.

    As-tu testé juste avec le deux lignes de code que je t'ai envoyé ci-dessus?
    Chez moi ça fonctionne sans problème je suis sous Win7 mais je ne pense pas qu'il y a un rapport.

    ahh.. n'oublie pas de remplacer hosts_old par hosts

    Sinon mis à part ça il y aurait forcément un autre programme qui l'utilise, tel que iTunes ou quelque chose du genre.

    Fait le test et tiens nous au courant

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Bonjour,

    Regarde un peu ce lien:
    http://realitygaming.fr/threads/vb-n...-darkz.120621/

    (je crois qu'il faut s'inscrire pour télécharger le zip).

  8. #8
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut
    Oui je me suis inscris, j'ai décompilé le programme et lui en fait il fait un streamwriter mais sur le bureau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Private Sub Generer_Click(ByVal sender As Object, ByVal e As EventArgs)
        If ((Me.TextBox1.Text = "URL du 1er site à bloqué") Or (Me.TextBox1.Text = "")) Then
            Me.TextBox1.Text = ""
            If ((Me.TextBox2.Text = "URL du 2ème site à bloqué") Or (Me.TextBox2.Text = "")) Then
                Me.TextBox2.Text = ""
                If ((Me.TextBox3.Text = "URL du 3ème site à bloqué") Or (Me.TextBox3.Text = "")) Then
                    Me.TextBox3.Text = ""
                    If ((Me.TextBox4.Text = "URL du 4ème site à bloqué") Or (Me.TextBox4.Text = "")) Then
                        Me.TextBox4.Text = ""
                        If ((Me.TextBox5.Text = "URL du 5ème site à bloqué") Or (Me.TextBox5.Text = "")) Then
                            Me.TextBox5.Text = ""
                            If ((Me.TextBox6.Text = "URL du 6ème site à bloqué") Or (Me.TextBox6.Text = "")) Then
                                Me.TextBox6.Text = ""
                                If ((Me.TextBox7.Text = "URL du 7ème site à bloqué") Or (Me.TextBox7.Text = "")) Then
                                    Me.TextBox7.Text = ""
                                    If ((Me.TextBox8.Text = "URL du 8ème site à bloqué") Or (Me.TextBox8.Text = "")) Then
                                        Me.TextBox8.Text = ""
                                        If ((Me.TextBox9.Text = "URL du 9ème site à bloqué") Or (Me.TextBox9.Text = "")) Then
                                            Me.TextBox9.Text = ""
                                            If ((Me.TextBox10.Text = "URL du 10ème site à bloqué") Or (Me.TextBox10.Text = "")) Then
                                                Me.TextBox10.Text = ""
                                                If ((Me.TextBox11.Text = "URL du 11ème site à bloqué") Or (Me.TextBox11.Text = "")) Then
                                                    Me.TextBox11.Text = ""
                                                    If ((Me.TextBox12.Text = "URL du 12ème site à bloqué") Or (Me.TextBox12.Text = "")) Then
                                                        Me.TextBox12.Text = ""
                                                        If ((Me.TextBox13.Text = "URL du 13ème site à bloqué") Or (Me.TextBox13.Text = "")) Then
                                                            Me.TextBox13.Text = ""
                                                        End If
                                                    End If
                                                End If
                                            End If
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If
        Dim writer As New StreamWriter((Environment.GetFolderPath(SpecialFolder.Desktop) & "\hosts"))
        writer.WriteLine("# Copyright (c) 1993-2009 Microsoft Corp.")
        writer.WriteLine("#")
        writer.WriteLine("# Ceci est un exemple de fichier HOSTS utilisé par Microsoft TCP/IP pour Windows.")
        writer.WriteLine("#")
        writer.WriteLine("# Ce fichier contient les correspondances des adresses IP au noms d'hôtes.")
        writer.WriteLine("# Chaque entrée doit être sur une ligne propre. L'adresse IP doit être placée")
        writer.WriteLine("# dans la première colonne, suivie par le nom d'hôte correspondant. L'adresse")
        writer.WriteLine("#  IP et le nom d'hôte doivent être séparés par au moins un espace.")
        writer.WriteLine("#")
        writer.WriteLine("# Additionally, comments (such as these) may be inserted on individual")
        writer.WriteLine("# lines or following the machine name denoted by a '#' symbol.")
        writer.WriteLine("#")
        writer.WriteLine("# For example:")
        writer.WriteLine("#")
        writer.WriteLine("#      102.54.94.97     rhino.acme.com          # source server")
        writer.WriteLine("#       38.25.63.10     x.acme.com              # x client host")
        writer.WriteLine("#")
        writer.WriteLine("# localhost name resolution is handled within DNS itself.")
        writer.WriteLine("#" & ChrW(9) & "127.0.0.1       localhost")
        writer.WriteLine("#" & ChrW(9) & "::1             localhost")
        writer.WriteLine("")
        writer.WriteLine(("127.0.0.1     " & Me.TextBox1.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox2.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox3.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox4.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox5.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox6.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox7.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox8.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox9.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox10.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox11.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox12.Text))
        writer.WriteLine(("127.0.0.1     " & Me.TextBox13.Text))
        writer.Close
        Interaction.MsgBox("Fichier Hosts générer avec succès sur vôtre bureau." & ChrW(13) & ChrW(10) & ChrW(13) & ChrW(10) & "Pour remplacer le fichier Hosts, vous devez renommé le fichier généré en ""hosts"" et aller dans :" & ChrW(13) & ChrW(10) & "C:\Windows\System32\drivers\etc\" & ChrW(13) & ChrW(10) & ChrW(13) & ChrW(10) & "Puis remplacer le fichier hosts par celui généré.", MsgBoxStyle.ApplicationModal, Nothing)
    End Sub

  9. #9
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Sais-tu qu'il existe des logiciels qui permettent de faire cela ? Par exemple Forefront ou encore ce genre de solutions réseau : Chronos.

    Avantages par rapport à ta solution du fichier hosts:
    - Gestion centralisée, pour tous les utilisateurs, donc pas besoin d'exécuter de programme sur le parc informatique.
    - Il est facile d'aller modifier le fichier hosts, là il faudra avoir les habilitations nécessaires pour se connecter au serveur, puis ouvrir le logiciel, faire la modif et activer la mise à jour (pas à la portée de tout le monde).

    Après bien sûr, tout dépend de ton scénario d'utilisation ! Si tu veux juste faire ça pour contrôler ton réseau local chez toi, effectivement pas la peine de déployer un tel logiciel Par contre si tu es en entreprise, c'est différent.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  10. #10
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut
    Salut DotNetMatt,
    je ne suis pas du tout en entreprise, je ne suis même pas programmeur, je suis lycéen ^^ En fait je veux créer ce programme et le proposer sur internet et essayer de proposer un meilleur logiciel que les autres contrôles parentaux

    @ACIVE_CS
    ça a marché sur ma VM Windows 7

  11. #11
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par CLeBeR Voir le message
    Salut DotNetMatt,
    je ne suis pas du tout en entreprise, je ne suis même pas programmeur, je suis lycéen ^^ En fait je veux créer ce programme et le proposer sur internet et essayer de proposer un meilleur logiciel que les autres contrôles parentaux
    Ok donc effectivement les logiciels que j'ai mentionné ne te seraient pas d'un grand secours Cependant comme je te l'ai dit, passer par le fichier hosts ne te met pas forcément à l'abris que l'enfant d'un de tes utilisateurs sache le faire et qu'il le fasse, à l'insu de ses parents

    Tu pourrais créer un proxy installé en local, par lequel toutes les requêtes HTTP passeraient. En appliquant un genre de GPO sur l'ordinateur, tu pourrais bloquer les modifications des options Internet, ce qui rendrait impossible d'enlever la configuration du proxy dans les options internet. Pour t'inspirer, tu peux regarder comment fonctionne Fiddler. Voilà juste quelques idées d'amélioration
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lire fichier texte en cours d'utilisation possible?
    Par philippe123 dans le forum VB.NET
    Réponses: 1
    Dernier message: 09/06/2008, 14h18
  2. [SQL] Tester si un fichier est en cours d'utilisation
    Par obordelow dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/04/2007, 14h07
  3. Réponses: 14
    Dernier message: 07/07/2006, 16h27
  4. Réponses: 1
    Dernier message: 31/03/2006, 11h24
  5. Comment lire un fichier DB en cours d'utilisation par 1 autr
    Par jbat dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2004, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo