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

VBScript Discussion :

Lancer script en mode 32 et 64 bits


Sujet :

VBScript

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut Lancer script en mode 32 et 64 bits
    Bonjour,

    J'ai un serveur 2008 R2 x64 sur lequel j’exécute une hta.

    Pour les besoin de mon script j'ai besoin de l’exécuter en 32 bits car certaines classes WMI ne sont accessibles qu'en 32 et
    certains exécutables système ne sont accessibles qu'en 32 également.

    Par défaut lorsque je clique sur la hta (comportement de l'OS par défaut), celle ci va s’exécuter en 64 bits : Process mshta.exe*32

    Commande :C:\Windows\SysWOW64\mshta.exe E:\Scripts\HTA\check.hta
    Process généré : mshta.exe*32

    Pour la lancer en 32 bits, il faut faire :

    c:\windows\System32\mshta.exe E:\Scripts\HTA\check.hta

    Ça fonctionne et elle se lance bien en 32 bits avec le process mshta.exe.


    Cependant, lorsque je clique sur ma hta, je souhaiterais que celle-ci détecte la version de mon OS et se lance en 32 ou 64 en fonction de l'OS détecté.

    Sur un OS 32 je n'ai pas de soucis.

    Donc pou éviter d'avoir plusieurs exécutables, 1 en 32 et 1 en 64, j'essaye de mettre en place une ruse.

    Dans mon script j'ai fait une détection d'OS en javascript.

    Si c'est du 64 bits il fait une copie temp.hta de mon script d'origine et lance le temp.hta en 32bits.

    Algo :

    --> Double Clique sur check.hta (Lancement 64 bits par défaut : mshta.exe*32)

    --> Si OS 32 Détecté on continue la routine, no pb.

    --> Si OS 64 Détecté, copie de check.hta en temp.hta

    --> Puis lancement dans check.hta de : WshShell.Run("c:\windows\System32\mshta.exe E:\Scripts\HTA\temp.hta "),1,true

    --> Kill de check.hta (père) pour ne laisser tourner que temp.hta(fils)

    --> Fin du script, puis del temp.hta


    Théoriquement ca ca devrait fonctionner :
    WshShell.Run("c:\windows\System32\mshta.exe E:\Scripts\HTA\temp.hta "),1,true

    mais en fait non

    Comme le père est lancé en 64 bits, le fils est aussi lancé en 64 bits mais ça ne devrait pas,

    J'ai 2 processus :

    check.hta (mshta.exe*32) --> 64 bits
    temp.hta (mshta.exe*32) --> 64 bits


    Au lieu de :

    check.hta (mshta.exe*32) --> 64 bits
    temp.hta (mshta.exe*32) --> 32 bits

    Si vous avez une solution ou si vous avez déjà eu ce genre de problème, je suis preneur.

    Merci d'avance.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Bon j'ai trouvé, il faut lancer le process en WIN32 via WMI

    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
     
    Const SW_NORMAL = 1
    strComputer = "."
    strCommand = "c:\windows\System32\cmd.exe /k c:\windows\System32\mshta.exe E:\Scripts\HTA\temp.hta" 
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" _
        & strComputer & "\root\cimv2")
     
    ' Configure the process to show a window
    Set objStartup = objWMIService.Get("Win32_ProcessStartup")
    Set objConfig = objStartup.SpawnInstance_
    objConfig.ShowWindow = SW_NORMAL
     
    ' Create process
    Set objProcess = objWMIService.Get("Win32_Process")
    intReturn = objProcess.Create _
        (strCommand, Null, objConfig, intProcessID)
    If intReturn <> 0 Then
        'Wscript.Echo "Process could not be created." & _
          '  vbNewLine & "Command line: " & strCommand & _
           ' vbNewLine & "Return value: " & intReturn
    Else
       ' Wscript.Echo "Process created." & _
            'vbNewLine & "Command line: " & strCommand & _
           ' vbNewLine & "Process ID: " & intProcessID
    End If
    merci !!!!!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 30
    Points : 16
    Points
    16
    Par défaut Autre méthode ?
    Bonjour,

    Existe-t-il une autre méthode , moins "sioux" et plus officielle, façon Microsoft ?
    Est-il possible de passer ce script en batch uniquement ?

    J'ai essayé de passer le commandes avec :
    c:\windows\System32\
    ou
    %systemroot\sysnative\

    Mon problème est de pouvoir lancer des scripts en 32 ou 64 bits (cela m'est égal) sur un Windows Seven Pro 64 bits, avec le compte local SYSTEM.
    Mes scripts fonctionnent sauf la partie HTA; le process MSHTA.exe est bien exécuté et présent, et le fichier HTA est bien en mémoire.
    Mais pas d'affichage du fichier HTA.

    Pourquoi ?

    Cdlt,

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

Discussions similaires

  1. Lancer Scripts Perl sous MySQL 5
    Par hanky dans le forum Installation
    Réponses: 2
    Dernier message: 01/10/2006, 16h26
  2. lancer script avec droit admin
    Par shintoisme dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 06/07/2006, 20h09
  3. Lancer script ou application au demarrage d'une machine distante
    Par Sendo dans le forum Administration système
    Réponses: 2
    Dernier message: 29/05/2006, 13h08
  4. Script en mode "silencieux"
    Par kafifi dans le forum Langage
    Réponses: 10
    Dernier message: 13/11/2005, 20h02
  5. Modes de couleur 16-bits
    Par Mark53 dans le forum DirectX
    Réponses: 4
    Dernier message: 12/10/2004, 22h49

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