Script batch ne fonctionne pas en le lancant en VB.NET
-
martes, 24 de abril de 2012 10:02
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")Je précise que si je lance manuellement le .bat sur les systèmes Windows 7 32 et 64 Bit, cela fonctionne parfaitement, si je lance par mon code VB.NET sur les systèmes 32 Bit, ça fonctionne aussi sauf pour les systèmes 64 Bit .
Est ce que le script .bat n'est pas compatible pour Windows 7 64 Bit ?
Merci de votre aide !
Todas las respuestas
-
martes, 24 de abril de 2012 13:50
Le mardi 24/04/2012 12:02:45, CLeBeR13 a écrit dans le message <news:a7ea2672-03e5-45ba-b53c-e34ed9a4910b@communitybridge.codeplex.com> ce qui suit :
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")Je précise que si je lance manuellement le .bat sur les systèmes Windows 7 32 et 64 Bit, cela fonctionne parfaitement, si je lance par mon code VB.NET sur les systèmes 32 Bit, ça fonctionne aussi sauf pour les systèmes 64 Bit .
Est ce que le script .bat n'est pas compatible pour Windows 7 64 Bit ?Est-ce que ton VB est 32 ou 64 bits ?
Car il existe DEUX programmes "reagentc.exe" :
Dans %systemroot%\System32 la version 64 bits :
14/07/2009 03:39 20 480 ReAgentc.exeDans %systemroot%\SysWOW64 la version 32 bits :
20/11/2010 14:17 22 016 ReAgentc.exe
Je rappelle le mécanisme de redirection system32/syswow64 dans les OS 64 bits :Afin de préserver la COMPATIBILITÉ (c'est moi qui souligne) des applications, le dossier système 64 bits est toujours appelé "System32".
(pour faciliter le travail au développeur qui recompile avec un compilateur 64 bits le même code - sans rien changer - qui avait été compilé avec un compilateur 32 bits)MAIS pour permettre aux applications 32 bits (qui ont le chemin du dossier "system32" codé en dur) d'accéder au répertoire système constitué de "SysWOW64", la couche WOW64 (Windows On Windows 64 bits) met en oeuvre une redirection dans le système de fichiers.
Tous les accès d'un processus 32 bits (exécuté dans WOW64) vers le répertoire %windir%\System32 sont redirigés vers le répertoire %windir%\Syswow64.
Si sous un OS 64 bits et depuis une appli 32 bits on souhaite ABSOLUMENT ouvrir le dossier
%systemroot%\system32
il faut en réalité demander l'ouverture du dossier
%systemroot%\sysnative
Ensuite on peut naviguer sans problème dans l'arborescence (p.ex. dans "%systemroot%\sysnative\drivers\etc")Ce sous-dossier "sysnative" est un alias de "system32", mais valable UNIQUEMENT dans le sous-ensemble 32 bits WOW64 ("Windows on Windows 64")
"sysnative" n'existe pas :
- dans les versions 32 bits de Windows
- dans l'environnement 64 bits des versions 64 bits de WindowsPar conséquent, avec la redirection de système de fichier activée, une application 32 bits accède de façon transparente au dossier "system32 pour applis 32 bits" dont le nom est en réalité "Syswow64".
Si le processus qui lance le script est 32 bits, ReAgentc.exe sera cherché dans SysWOW64.
Si le processus qui lance le script est 64 bits, ReAgentc.exe sera cherché dans System32.Donc est-ce que %systemroot%\SysWOW64 contient bien ReAgentc.exe ?
AMHA, le pb doit se situer à ce niveau ...
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP Expert IT Pro]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr- Propuesto como respuesta arch21Microsoft Community Contributor, Editor martes, 24 de abril de 2012 14:30
- Marcado como respuesta arch21Microsoft Community Contributor, Editor miércoles, 25 de abril de 2012 15:29
-
miércoles, 25 de abril de 2012 21:37
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 !
- Marcado como respuesta CLeBeR miércoles, 25 de abril de 2012 21:37
-
jueves, 26 de abril de 2012 6:52Propietario
Bonjour,
Merci pour votre retour!
Cordialement,
Dan
Dan BAJENARU, MSFT Votez! Appel à la contribution
Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

