Discussion:
Vbscript probleme de "runas" via excel VBA lors d'une 1ere exécution
(trop ancien pour répondre)
quicksilvain
2015-03-12 15:19:58 UTC
Permalink
Salut a tous

Avec excel vba je dois faire appel a un fichier vbscript avec une demande d’élévation pour des mis à jour, cela fonctionne très bien si on a déjà exécuter un vbscript avec une demande d’élévation sur le fichier vbscript lui même.

Savez vous pourquoi lorsque j'exécute un vbscript via excel vba lors d'une 1ere exécution (sans avoir jamais exécuter de vbscript dans le PC) ça fonctionne pas?

Par contre, si j'exécute le vbscript lui même et que je retourne dans excel vba pour exécuter ce vbscript (et même d'autres) ça fonctionne?

Je trouve ça bizarre..

Merci
--
This post on narkive:
http://narkive.com/TLYkoKXK
quicksilvain
2015-03-12 16:44:58 UTC
Permalink
J'ai oublier voici le message d'erreur: "le service ne peut pas accepter des commandes en ce moment"
--
This post on narkive:
http://narkive.com/TLYkoKXK.2
isabelle
2015-03-12 17:00:10 UTC
Permalink
bonjour,

est ce que tu utilises cette commande ?

Shell Environ("COMSPEC") & " /c start """" ""C:\test.vbs""", 1

isabelle
Post by quicksilvain
J'ai oublier voici le message d'erreur: "le service ne peut pas accepter des commandes en ce moment"
quicksilvain
2015-03-12 18:46:59 UTC
Permalink
Post by isabelle
bonjour,
est ce que tu utilises cette commande ?
Shell Environ("COMSPEC") & " /c start """" ""C:\test.vbs""", 1
isabelle
Merci non j'utilise ce code vba pour faire appel au vbscript:

Shell "wscript C:\fichier.vbs", vbNormalFocus

Et voici le code qui se trouve dans le fichier vbscript:

If WScript.Arguments.length =0 Then
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "WScript.exe", Chr(34) & _
WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
Else

'Mon code ici

End If
--
This post on narkive:
http://narkive.com/TLYkoKXK.6
isabelle
2015-03-12 20:04:21 UTC
Permalink
peut l'essayer, en adaptant avec le chemin complet de ton fichier vbs

Sub test()
Shell Environ("COMSPEC") & " /c start """" ""C:\test.vbs""", 1
End Sub

isabelle
Post by quicksilvain
Post by isabelle
bonjour,
est ce que tu utilises cette commande ?
Shell Environ("COMSPEC") & " /c start """" ""C:\test.vbs""", 1
isabelle
Shell "wscript C:\fichier.vbs", vbNormalFocus
If WScript.Arguments.length =0 Then
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "WScript.exe", Chr(34) & _
WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
Else
'Mon code ici
End If
MichD
2015-03-12 17:20:06 UTC
Permalink
Bonjour,

Une façon de faire...

Si le contrôle du compte usager dans le panneau de configuration est activé,
tu auras un message à savoir si oui ou non tu veux exécuter le programme.
C'est la sécurité de Windows...

'----------------------------------------------
Sub test()
Dim ObjShell As Object

Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "cscript",
"c:\Users\TonProfil\Documents\TonFichier.vbs", "", "runas", 0
End Sub
'----------------------------------------------
MichD
2015-03-12 17:36:06 UTC
Permalink
Correction, il y a une petite erreur dans l'ordre des arguments
de la fonction appelée.

Comme ceci, tu n'as aucun message du contrôle du compte usager.

ObjShell.ShellExecute "cscript", _
"c:\Users\TonProfil\Documents\NomFichier.vbs", "runas", "", 0

N.B. Attention aux coupures intempestives du service de messagerie

La macro complète est par conséquent :
'----------------------------------------------
Sub test()
Dim ObjShell As Object

Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "cscript", _
"c:\Users\TonProfil\Documents\NomFichier.vbs", "runas", "", 0
End Sub
'----------------------------------------------
quicksilvain
2015-03-12 18:52:08 UTC
Permalink
Post by MichD
Correction, il y a une petite erreur dans l'ordre des arguments
de la fonction appelée.
Comme ceci, tu n'as aucun message du contrôle du compte usager.
ObjShell.ShellExecute "cscript", _
"c:\Users\TonProfil\Documents\NomFichier.vbs", "runas", "", 0
N.B. Attention aux coupures intempestives du service de messagerie
'----------------------------------------------
Sub test()
Dim ObjShell As Object
Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "cscript", _
"c:\Users\TonProfil\Documents\NomFichier.vbs", "runas", "", 0
End Sub
'----------------------------------------------
Merci

Effectivement avec ce code ça fonctionne.. car j'utilisais ce code:
Shell "wscript C:\fichier.vbs", vbNormalFocus

Quel est la différence entre votre code et celui-ci ?

Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "wscript.exe", C:\fichier.vbs -1", "", "runas", 1
--
This post on narkive:
http://narkive.com/TLYkoKXK.7
MichD
2015-03-12 20:37:58 UTC
Permalink
Si tu préfères, tu peux utiliser ceci si tu as une installation Windows
Standard.

'--------------------------------------------------------
Sub Test()
Dim Exécutable As String, Fichier As String

'Le programme qui ouvre le fichier .vbs est : "cscript.exe"
'La localisation de ce dernier est :
'Windows 32 bits ==>> C:\windows\System32\
'Windows 64 bits ==>> C:\windows\SysWow64\

Exécutable = "cscript.exe "
Fichier = "c:\Users\TonProfil\Documents\TonFichier.vbs"

Shell Exécutable & Fichier, 0
End Sub
'--------------------------------------------------------

Cela te convient...
quicksilvain
2015-03-12 22:26:07 UTC
Permalink
Merci MichD mais comme je l'ai dit la commande Shell fonctionne pour une 1ere exécution

Que vous vous dire par "Comme ceci, tu n'as aucun message du contrôle du compte usager." ?

Car ce code ci-dessous fonctionne pas: erreur : Permission refuser

Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "wscript.exe", C:\fichier.vbs -1", "", "runas", 1

Merci
--
This post on narkive:
http://narkive.com/TLYkoKXK.10
MichD
2015-03-12 23:56:40 UTC
Permalink
Peux-tu être précis dans la définition de ton problème et ce que tu veux
faire?

Quelle version de Windows as-tu? 32 ou 64 bits?

Est-ce que tu es admin sur l'ordinateur où tu veux exécuter le fichier .VBS?
Je ne travaille pas en réseau, je suis le seul usager de mon ordinateur et
je suis ADMIN.
Je ne peux pas testé sur un compte usager non admin.

Si tu es dans un réseau, est-ce que tu as les droits nécessaires pour
exécuter un fichier .vbs?

Dans ta ligne de code :
objShell.ShellExecute "wscript.exe", C:\fichier.vbs -1", "", "runas", 1

Que signifie le -1 ?


Place ton fichier .VBS dans un répertoire que tu crées par exemple dans le
répertoire
c:\Users\Ton profil\Documents\

Ceci fonctionne aussi :

'------------------------------------------
Sub test1()
Dim ObjShell As Object

Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "wscript.exe",
"c:\Users\TonProfil\Documents\TonFichier.vbs", "runas", "", 0

End Sub
'------------------------------------------


Ceci aussi fonctionne :
'------------------------------------------
Sub test3()
Dim Exécutable As String, Fichier As String

'Le programme qui ouvre le fichier .vbs est : "cscript.exe"
'La localisation de ce dernier est :
'Windows 32 bits ==>> C:\windows\System32\
'Windows 64 bits ==>> C:\windows\SysWow64\

Exécutable = "wscript.exe "
Fichier = "c:\Users\TonProfil\Documents\TonFichier.vbs"

Shell Exécutable & Fichier, 0
End Sub
'------------------------------------------
quicksilvain
2015-03-13 09:02:14 UTC
Permalink
Merci MichD

Finalement après plusieurs test, et après avoir essayer tout les codes ci-dessus ça fonctionne pas..

Je réexplique mon problème afin d'éclaircir..


Voici le code de ma macro VBA "ShellExecute" pour lancer le vbscript:

Dim ObjShell As Object
Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "Wscript", _
"C:\Fichier.vbs", "", "runas", 0


Mais malheureusement sur plusieurs PC même en réseaux lancer le vbscript dans une macro VBA en demandant un élévation avec ShellExecute sur un PC qui n'a jamais lancer de vbscript en double cliquant dessus ne fonctionne pas.. J'ai cette erreur : "Le service ne peut pas accepter de commande en ce moment"

Par contre si auparavant on lance un vbscript quelconque qui contient le code ci dessous (demande d'élévation) en double cliquant dessus directement puis je retourne sur Excel pour lancer le vbscript depuis la macro ShellExecute ça fonctionne..

Voici le code que contient le vbscript pour pouvoir cliquer directement sans passer par la macro VBA:

If WScript.Arguments.length =0 Then
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "WScript.exe", Chr(34) & _
WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
Else

'Mon code ici

End If


C'est un gros problème car la plupart des PC n'ont jamais exécuter de vbscript donc ma macro ne fonctionne pas.

C'est fou ça faut il initialiser le moteur "Wscript" ou "Cscript" pour pouvoir lancer un vbscript depuis une autre application.. ?

Merci
--
This post on narkive:
http://narkive.com/TLYkoKXK.12
MichD
2015-03-13 11:17:36 UTC
Permalink
A ) Lorsque je demande des Infos. sur ton environnement, je pensais avoir
droit à des réponses!

B ) Ton problème n'est pas directement relié à Excel, mais à ton
installation de Windows.

Je te suggère fortement de poser ta question sur un forum Windows pour
répondre à ta question:
"C'est fou ça faut il initialiser le moteur "Wscript" ou "Cscript" pour
pouvoir lancer un vbscript depuis une autre application.. ?"

Lorsque tu auras trouvé, il y a probablement des usagers intéressés par la
réponse...Si cela te tente de partager...
quicksilvain
2015-03-13 20:56:39 UTC
Permalink
Oui désolé j'ai Windows 7 pro 64 bits et je suis Admin

J'ai déjà posé la question sur un forum Windows mais j'ai eu aucune réponse..

Si je la trouve, je la posterais ici

Encore merci
--
This post on narkive:
http://narkive.com/TLYkoKXK.14
MichD
2015-03-13 23:45:36 UTC
Permalink
À tout hasard, essaie ceci, je ne peux pas vraiment tester ceci...

'--------------------------------------------------------
Sub RunAsAdmin()
Dim Fichier As String, ObjShell As Object

Fichier = "C:\Users\Ton Profil\documents\TonFichier.vbs"

Set ObjShell = CreateObject("Shell.Application")

ObjShell.ShellExecute "CMD.exe", _
"cscript //h:cscript", _
"runas:" & Environ("Username"), "", 0

ObjShell.ShellExecute "cscript.exe", _
CStr(Fichier), "runas:" & Environ("Username"), "", 0

End Sub
'--------------------------------------------------------

Es-tu certain de ne pas être victime d'un espiogiciel?
Pour cela, tu peux télécharger et installer la version gratuite ici :
https://www.malwarebytes.org/
quicksilvain
2015-03-16 10:44:37 UTC
Permalink
Merci MichD votre solution fonctionne parfaitement je suis très content..

Pourquoi j'aurais un espiogiciel?

Encore merci mille fois..
--
This post on narkive:
http://narkive.com/TLYkoKXK.16
MichD
2015-03-16 16:35:04 UTC
Permalink
| Pourquoi j'aurais un espiogiciel?

**** Personne n'en veut...Mais habituellement, il s'installe
sans demander la permission un peu à la manière d'un
virus. Dans certains cas, certains de ces petits programmes
ont des effets indésirables avec Windows ou les
applications Microsoft.

Continuer la lecture sur narkive:
Loading...