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
Es gibt mir einen Fehler:
Object required: '[string: "c:\windows\system32\"]' Code 800A01A8
Update
Da es nicht eindeutig ist, sollten Sie darauf hinweisen, dass Ihr
Object Required
-Problem auf diese Zeile zurückzuführen istSet scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
Dies liegt daran, dass ein Objekt erwartet wird, ihm jedoch eine Zeichenfolge zugewiesen wird. Durch Entfernen der
Set
wird Ihr Code funktionieren (As Ekkehard.Horner has wies auf ).Unten ist meine Interpretation der Situation. Beim ersten Blick auf Ihren Code sah es fast so aus, als hätte er die Instantiierung des
WScript.Shell
-Objekts mit der Befehlszeile für die.Run()
-Methode gemischt. Es war mein erster Versuch, den Code aufzubrechen, neu zu ordnen und wieder zusammenzufügen.
Ursprüngliche Antwort
Ihr Set scmd
sollte den WScript.Shell
instanziieren (Als Ekkehard.Horner weist Sie darauf hin, dass Sie Server.CreateObject("WScript.Shell").Run
für eine einmalige Referenz verwenden können, aber ich würde es nicht empfehlen).
Das .Run()
sollte vom instanziierten scmd
-Objekt ausgeführt werden und die Befehlszeile zur Ausführung übergeben.
Hier ist ein Beispiel, bei dem ich einige der Variablen umbenannt habe (zum Beispiel scmd
in cmd
).
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
Dinge zu beachten
Wenn Sie WScript.Shell in Classic ASP verwenden, um ausführbare Dateien auszuführen, müssen einige Punkte beachtet werden.
Der Befehl Ausführen wird mit der aktuellen Anwendungspoolidentität ausgeführt.
Run führt die ausführbare Datei auf dem Server aus, nicht auf dem Client (Server-Seite).
Wie
>> WScript.Echo CreateObject("WScript.Shell").CurrentDirectory
>>
E:\trials\SoTrials\answers\trials\AlgoTaBu\SuSo\wsf
beweist, es gibt überhaupt keine Regel oder Vorschrift, dass "Ihr Set scmd
die WScript.Shell instanziieren soll". Es ist empfehlenswert, den Befehl in der String-Variablen scmd (oder vielleicht besser sCmd) auszuführen und keine Variable für einen nur einmal verwendeten Wert zu erstellen.
Die überarbeitete Version (abzüglich des blöden Sets):
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
wird genauso gut funktionieren wie Lankymarts Version.
Um alles zu buchstabieren:
"site:stackoverflow.com vbscript "object required" Set"
ergibt 1500 Treffer. Auch wenn viele dieser Treffer den "Set x = 'non-object'
-Fehler nicht betreffen, ist das eindeutig zu viel. Um diese IEDs zu erklären/zu entschuldigen, muss berücksichtigt werden, dass BASIC eine Sprache aus der Steinzeit ist."Set x = 'non-object'
-Fehler überrascht zu werden. Wenn es dreimal vorkommt (oder öfter), sollte er/sie sich schämen (und darüber schweigen). Vor allem dieses Problem sollte diese Seite nicht verschmutzen.wtf
Set x = " ---- stop or be damned!!!
Set x = obj.getNumber() + 4 ---- oh no!!!