Ligne de commande non fonctionnelle en VB.NET

Résolu
Utilisateur anonyme - 11 avril 2012 à 22:54
 Utilisateur anonyme - 25 avril 2012 à 23:35
Bonjour,
je voudrais faire en sorte que le PC de l'utilisateur de mon logiciel redémarre tout seul une fois en mode PE Windows ( en mode réparation ) j'ai donc créer un .bat que mon logiciel lance, sauf que si je le lance manuellement mon PC redémarre en PE comme voulu, mais si je le lance à partir de mon soft ça ne fonctionne pas, reagentc.exe est introuvable.
Voici mon code d'appel :

Dim CreationRestartRepairMode As New StreamWriter("C:\RestartReparMode.bat")
                CreationRestartRepairMode.WriteLine("@echo off")
                CreationRestartRepairMode.WriteLine("reagentc /boottore")
                CreationRestartRepairMode.WriteLine("shutdown /r")
                CreationRestartRepairMode.Close()
                System.Diagnostics.Process.Start("C:\RestartReparMode.bat")

Merci de votre aide

31 réponses

Utilisateur anonyme
25 avril 2012 à 23:35
Sujet résolu ! :) Il fallait déboguer le programme en mode "Any CPU" pour ce faire :

Dans visual Studio, ouvrir votre projet visual studio --> Propriétés --> Compiler --> Option avancé de compilation --> Unité central cible --> "Any CPU"

Merci de votre aide !
3
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
Modifié le 2 oct. 2017 à 12:40
Bonjour,

Microsoft dit que c'est seulement pour Windows7, est-ce ton cas ? Car sinon, pas exemple sous Vista, ça ne fait que redémarrer (j'ai testé).

http://technet.microsoft.com/fr-fr/library/dd799242(v=ws.10).aspx

Qui te dit qu'il y a un exe nommé "reagentc.exe" ?
Il me semble (sous réserve) que ce n'est ps un exe mais une commande du noyau système...

Déjà, est-ce que tu retrouves ton bat et ce qu'il faut dedans à l'endroit pévu, si tu sors avant de le lancer et vas voir manuellement ?

Nota bene : il peut être bon ensuite de ne pas le laisser ce Bat, à supprimer en fermeture de logiciel...

Tente ceci et dis...

Sub lance()
 Dim p As New StreamWriter("C:\RestartReparMode.bat")
 p.WriteLine("@echo off")
 p.WriteLine("reagentc /boottore")
 p.WriteLine("shutdown /r")
 p.Close()
 Try
  Process.Start("C:\RestartReparMode.bat")
  Catch ex As Exception
   MsgBox("Logiciel introuvable ", vbExclamation, 
My.Application.Info.ProductName)
 End Try
 System.Threading.Thread.Sleep(500)
 My.Application.DoEvents()
 Kill ""C:\RestartReparMode.bat""
 System.Threading.Thread.Sleep(500)
 End
End Sub


Cordialement, Joe.
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
12 avril 2012 à 08:28
Correction erreur code

Annuler ça :

Kill ""C:\RestartReparMode.bat""

Remplacer par :

Kill "C:\RestartReparMode.bat"

Joe.
0
Utilisateur anonyme
14 avril 2012 à 23:53
Salut Joe,
ta technique de marche pas, toujours la même erreur. ( J'ai mis après le shutdown un "pause" pour voir l'erreur )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
15 avril 2012 à 12:34
Ah... suite...

Ah, a contrario de ce qu'il me semblait avoir lu, il apparaîtrait que ce soit bien un "exe"!

Faire une recherche depuis C sur cet exe avec l'explorateur, et à défaut :

Il faut en trouver un (si possible depuis les sources Microsoft) et le mettre avec ton bat, déjà pour voir...

Mais... la question relève aussi d'un forum "Windows x", car c'est un problème de commande...

Cordialement, Joe.
0
Utilisateur anonyme
15 avril 2012 à 13:20
Je ne pense pas que sa soit un problème de commande car si je lance manuellement le .bat ça marche
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
15 avril 2012 à 14:20
Et si tu fais ça déjà, ça donne quoi ?

' METTRE LA BONNE ADRESSE
Try
  Process.Start("C:\ReAgent.exe")
  Catch ex As Exception
   MsgBox("Echec ", vbExclamation, 
My.Application.Info.ProductName)
End Try
'
' ----- ET -----
'
Try
  Process.Start("C:\ReAgent.exe", "paramètres")
  Catch ex As Exception
   MsgBox("Echec ", vbExclamation, 
My.Application.Info.ProductName)
End Try


Ça donne quoi en te passant du BAT ?

Cordialement, Joe.
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
15 avril 2012 à 14:21
Heu, remplacer

ReAgent

Par

ReAgentc
0
Utilisateur anonyme
17 avril 2012 à 13:28
Salut,
rien ne marche
A la place de paramètre j'ai mis
ReAgentc /boottore
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
17 avril 2012 à 13:41
Nouveau jour,

Je crois qu'il faut seulement mettre le paramètre :

Try
  Process.Start("C:\ReAgentc.exe", "boottore")
  ' OU ???
  Process.Start("C:\ReAgentc.exe", boottore)
  Catch ex As Exception
   MsgBox("Echec ", vbExclamation, 
My.Application.Info.ProductName)
End Try


Mais tu n'as même pas dit ce que ça fait quand tu écris :

Try
Process.Start("C:\ReAgentc.exe")
Catch ex As Exception
MsgBox("Echec ", vbExclamation,
My.Application.Info.ProductName)
End Try

Cordialement, Joe.
0
Utilisateur anonyme
17 avril 2012 à 19:32
Salut,
lorsque je fais :

Try
            Process.Start("C:\Windows\System32\ReAgentc.exe", "/boottore")
            ' OU ???
        Catch ex As Exception
            MsgBox("Echec ", vbExclamation,
         My.Application.Info.ProductName)
        End Try


Résultat : Reagentc introuvable...
et lorsque je fais :
        Try
            Process.Start("C:\Windows\System32\ReAgentc.exe")
        Catch ex As Exception
            MsgBox("Echec ", vbExclamation,
            My.Application.Info.ProductName)
        End Try


Ligne de commande erronée
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
17 avril 2012 à 21:12
Suite...

Tente l'argument sans le slash, faut faire des essais divers...

Alors je ne sais pas, vois l'aide à propos de la commande "process.start" car a priori on doit avoir une documentation, aussi bien sur l'exe et ses paramètres que sur process.start, il doit sans doute y avoir une solution, mais je ne peut pas tester car j'ai Vista aui semblerait ne pas répondre de la même façon...

Cordialement, Joe.
0
Utilisateur anonyme
17 avril 2012 à 21:20
Re,
quand j'ouvre cmd.exe manuellement et que je fais Dim RedémarragePE As New Process
reagentc /boottore >NUL

Seulement, lorsque je rentre le code suivant dans mon bouton, et bien la cmd.exe se lance mais la commande ne s'écrit pas et ne s’exécute pas. ( alors qu'avec une autre commande et je crois que j'ai trouvé la raison pour laquelle sa ne fonctionne pas.

        Dim RedémarragePE As New Process
        With RedémarragePE.StartInfo
            .FileName = "cmd.exe"
            .Arguments = "reagentc /boottore >NUL"
        End With
        RedémarragePE.Start()


Voici la raison pourquoi je pense que sa ne marche pas :


Source : http://technet.microsoft.com/fr-fr/library/dd799242%28v=ws.10%29.aspx

J’interprète le "En ligne uniquement" comme "Doit être tapé manuellement par l'utilisateur.
Je vais aller sur les forums du MSDN et demander.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 avril 2012 à 07:25
Bonjour,
1) Ne serait-ce pas tout simplement une question de permissions ?
Lorsque tout marche, depuis la ligne de commande, en quel mode es-tu ?
Normal ? ou en tant qu'administrateur ?

2) as-tu essayé avec Shell directement (au lieu de Procces.start) ? Et en lançant ton appli en tant qu'administrateur ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Utilisateur anonyme
18 avril 2012 à 12:41
Salut ucfoutu
1) Je lance ma cmd en "normale"
2)Oui j'ai essayé
shell("c:\monfichier.bat")
et en lançant le programme en mode administrateur mais ça ne marche pas.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 avril 2012 à 12:53
Non ! pas ainsi !
Tu disais plus haut que lorsque lancé en ligne de commande, cela marchait.
Bien
1) Qu'y écrivais-tu exactement ?
C'est cela même que tu devrais tenter avec Shell.
2) j'insiste à propos du mode d'exécution (en tant qu'administrateur ou non ?)




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Utilisateur anonyme
18 avril 2012 à 17:43
Non je lançais normalement j'écrivais ceci --> reagentc /boottore >NUL
Peux tu m'expliquer comment tu veux que je l'utilise le shell car je ne vois pas.
Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 avril 2012 à 18:09
Où exactement écrivais-tu ceci
reagentc /boottore >NUL
Dans MSDOS ?
ou
Dans la ligne de commande de Windows (démarrer >>> exécuter) ?
car pas exactement pareil !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
18 avril 2012 à 19:53
Code adapté windows 32 et >

Public Class Form1
  Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
  ByVal Handle As Int32, _
  ByVal lpOperation As String, _
  ByVal lpFile As String, _
  ByVal lpParameters As String, _
  ByVal lpDirectory As String, _
  ByVal nShowCmd As Int32) As Int32

  Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim r As Int32
    r = ShellExecute(0, "open", "http://www.microsoft.com", 0, 0, 1)
  End Sub
End Class


Paramètre :

r = ShellExecute(0, "open", "http://www.microsoft.com", 0
, 0, 1)
0
Rejoignez-nous