call main()
sub main()
Dim scmd
Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
createobject("wscript.Shell").run scmd,0,false
end sub
Cela me donne une erreur:
Object required: '[string: "c:\windows\system32\"]' Code 800A01A8
Mise à jour
Comme il n’est pas évident de penser que le mieux est de signaler que votre problème avec
Object Required
est dû à cette ligneSet scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
Cela est dû au fait qu'un objet est attendu mais que vous lui affectez une chaîne. En supprimant la variable
Set
, votre code fonctionnera (As Ekkehard.Horner a a souligné ).Ci-dessous, mon interprétation de la situation. En examinant d'abord votre code, vous avez presque l'impression qu'il a mélangé l'instanciation de l'objet
WScript.Shell
avec la ligne de commande de la méthode.Run()
. C’est la première fois que j’ai essayé de casser le code, de le réorganiser puis de le remettre en place.
Réponse originale
Votre Set scmd
devrait instancier le WScript.Shell
(As Ekkehard.Horner indique que vous pouvez utiliser Server.CreateObject("WScript.Shell").Run
pour une référence unique, mais je ne le recommanderais pas).
La .Run()
doit être exécutée par l'objet instancié scmd
et la ligne de commande à exécuter.
Voici un exemple que j'ai renommé certaines des variables (scmd
à cmd
par exemple).
Call main()
Sub main()
'Renamed variables to cmd is your object and cmdline is your file path.
Dim cmd, cmdline
'Instantiate WshShell object
Set cmd = Server.Createobject("WScript.Shell")
'Set cmdline variable to file path
cmdline = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
'Execute Run and return immediately
Call cmd.Run(cmdline, 0, False)
End Sub
Points à considérer
Lors de l'utilisation de WScript.Shell dans Classic ASP pour exécuter des exécutables, il convient de prendre en compte certains éléments.
La commande Exécuter sera exécutée en utilisant l'identité actuelle du pool d'applications.
Exécuter exécutera l'exécutable sur le serveur, pas sur le client (côté serveur).
Comme
>> WScript.Echo CreateObject("WScript.Shell").CurrentDirectory
>>
E:\trials\SoTrials\answers\trials\AlgoTaBu\SuSo\wsf
prouve, il n’existe aucune règle ou loi du tout que "Votre Set scmd
devrait instancier le WScript.Shell". Placer la commande à exécuter dans la variable chaîne scmd (ou peut-être mieux sCmd) et ne pas créer de variable pour une valeur à utilisation unique sont de bonnes pratiques.
La version révisée (moins le stupide Set):
call main()
sub main()
Dim scmd
scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
createobject("wscript.Shell").run scmd,0,false
end sub
fonctionnera aussi bien que la version de Lankymart.
Pour tout épeler:
"site:stackoverflow.com vbscript "object required" Set"
génère 1500 occurrences. Même si beaucoup de ces hits ne concernent pas la gaffe "Set x = 'non-object'
, c’est clairement trop. Pour expliquer/excuser ces EEI, vous devez considérer que BASIC est une langue de l’âge de pierre."Set x = 'non-object'
. Si cela se produit trois fois (ou plus souvent), il devrait avoir honte (et garder le silence à ce sujet). Avant tout, ce problème ne devrait pas polluer ce site.wtf
Set x = " ---- stop or be damned!!!
Set x = obj.getNumber() + 4 ---- oh no!!!