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 :

Exportation du registre sous VB.net via CMD


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2015
    Messages : 35
    Points : 32
    Points
    32
    Par défaut Exportation du registre sous VB.net via CMD
    Bonjour à tous,

    J'aimerais pouvoir exporter le registre via mon application VB.net. Après quelques recherches sur Internet, j'ai trouvé que le meilleur moyen de le faire était de passer par cmd. J'ai alors crée le processus, lors de l'ouverture de mon application, cmd s'ouvre, le UAC de regedit s'ouvre, j'accepte, cmd charge, s'éteint (tout est normal) mais le fichier n'est pas crée ! Quel est l'erreur dans mon programme ?

    Merci d'avance. PS : Error 1 est géré par le catch ex as exception juste en dessous.
    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
     
    Dim a = New ProcessStartInfo
    Dim p = New Process
    a.FileName = "cmd.exe"
    MsgBox("/c regedit /E Regeditexportation.reg || regedit /E Regeditexportation.reg")
    a.Arguments = "/c regedit /E Regeditexportation.reg"
    a.CreateNoWindow = False
    p.StartInfo = a
    a.UseShellExecute = False
    p.Start()
    a.StandardOutputEncoding = Encoding.GetEncoding(850)
    p.WaitForExit(30000)
     If File.Exists("Regeditexportation.reg") = False Then
     Error 1
    End If
    L'important n'est pas de savoir, l'important est de savoir comment savoir.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Mais, tu peux obtenir le texte du message d'erreur:

    => Exception c'est une classe avec ses propriétés et ses méthodes
    => Ex, c'est un objet Exception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try
       'opération qui plante ou qui pourrait planter
    catch ex as exception
       messagebox.show(ex.message)
    end try
    Surtout qu'avec un bloc Try tu n'as absolument pas besoin des antiquités suivantes. Elles sont là juste pour préserver la compatibilité

    On Error goto
    On Error gosub
    On Error Resume
    On error resume next
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2015
    Messages : 35
    Points : 32
    Points
    32
    Par défaut Message d'erreur
    Justement, le seul message d'erreur que je reçois est celui que j'ai moi-même stimulé par Error 1 (Message d'erreur : Erreur défini par l'application ou par l'objet.)
    En effet, il n'y a pas d'erreur, cmd s'ouvre normalement, l'UAC s'ouvre avec les informations de regedit, je valide, cmd charge, se ferme, tout est normal mais pas de fichier, que ce soit dans le fichier bin de l'application ou autre part quand je donne un chemin de fichier absolu.
    Je pourrais tenter de récupérer la sortie du processus cmd, voire si il me renvoit un succès ou un échec mais quand j'essaye :
    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
     
    Dim a = New ProcessStartInfo
                    Dim p = New Process
                    a.FileName = "cmd.exe"
                    MsgBox("/c regedit /E " & My.Computer.FileSystem.SpecialDirectories.Desktop & "\Regeditexportation.reg || regedit /E " & My.Computer.FileSystem.SpecialDirectories.Desktop & "\Regeditexportation.reg")
                    a.Arguments = "/c regedit /E " & My.Computer.FileSystem.SpecialDirectories.Desktop & "\Regeditexportation.reg"
                    a.CreateNoWindow = False
                    p.StartInfo = a
                    a.UseShellExecute = False
                    p.Start()
                    a.StandardOutputEncoding = Encoding.GetEncoding(850)
                    p.WaitForExit(30000)
                    MsgBox(p.StandardOutput.ReadToEnd)
                    If File.Exists("Regeditexportation.reg") = False Then
                        Error 1
                    End If
    Il me dit : StandardOutput n'a pas été redirigé ou le processus n'a pas commencé., donc je n'arrive pas à en tirer quelque chose.
    Je pense que le problème doit venir d'une mauvaise syntaxe de la commande ou du code en lui-même...
    L'important n'est pas de savoir, l'important est de savoir comment savoir.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2015
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    UP !
    L'important n'est pas de savoir, l'important est de savoir comment savoir.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2015
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    J'ai résolu mon problème en le contournant un petit peu, mais comme le code de l'invite de commandes n'est pas confidentiel, ça ne posait pas de problèmes.
    J'ai en faite crée un fichier bat avec les instructions, je l'ouvre, j'attend au plus 30 secondes que le programme se mette en route (le problème freeze, mais vous pouvez utiliser un backgroundworker), puis le fichier bat est supprimé, on vérifie la présence de la sauvegarde regedit pour être sûr que tout s'est bien passé et on retourne True ou False en fonction du succès ou de l'échec. Voici la fonction :
    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
     
    Private Function save_registry(ByVal filepath As String)
            Try
                If File.Exists(Path.GetDirectoryName(filepath) & "\command.bat") = True Then
                    File.Delete(Path.GetDirectoryName(filepath) & "\command.bat")
                End If
                File.AppendAllText(Path.GetDirectoryName(filepath) & "\command.bat", "regedit /E " & Chr(34) & filepath & Chr(34))
                Dim a = Process.Start(Path.GetDirectoryName(filepath) & "\command.bat")
                a.WaitForExit(30000)
                Try
                    File.Delete(Path.GetDirectoryName(filepath) & "\command.bat")
                Catch ex As Exception
     
                End Try
                If File.Exists(filepath) = True Then
                    Return True
                Else
                    Return False
                End If
            Catch ex As Exception
                Return False
            End Try
        End Function
    Que vous pouvez apeller par un chemin d'accès + nom du fichier et extension, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox(save_registry(Application.UserAppDataPath & "\exportation.reg"))
    PS : Merci à ce fil pour m'avoir indirectement aidé : http://www.developpez.net/forums/d15...l-fichier-bat/
    Le sujet est
    L'important n'est pas de savoir, l'important est de savoir comment savoir.

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

Discussions similaires

  1. [Débutant] Analyse multicritères et exportation du résultats sous forme Excel - VB .NET
    Par Aiman.elmachi dans le forum VB.NET
    Réponses: 5
    Dernier message: 07/06/2014, 15h50
  2. [Débutant] gestion Loging sous DOT.NET et AD ou via IIS ?
    Par Hepil dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 26/06/2012, 13h33
  3. [vb.net] Ecrire dans le registre sous Seven
    Par Aspic dans le forum VB.NET
    Réponses: 8
    Dernier message: 02/12/2009, 21h59
  4. Réponses: 6
    Dernier message: 30/01/2005, 23h48
  5. Exporter des données sous forme de requetes
    Par Pasiphae dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/10/2004, 17h27

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