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
它给了我错误:
Object required: '[string: "c:\windows\system32\"]' Code 800A01A8
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
它给了我错误:
Object required: '[string: "c:\windows\system32\"]' Code 800A01A8
更新
因为不清楚是否最好指出你的
Object Required
问题是由于这条线Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
这是因为期望一个Object,但是你通过删除它来为它分配一个字符串
Set
你的代码将工作(作为 Ekkehard.Horner 具有 指出)。
以下是我对情况的解释。首先看看你的代码,它几乎看起来像混合了实例
WScript.Shell
使用命令行的对象.Run()
方法。这是我第一次尝试分解代码,重新排列然后将其重新组合在一起。
原始答案
你的 Set scmd
应该实例化 WScript.Shell
(如 Ekkehard.Horner 指出你可以使用 Server.CreateObject("WScript.Shell").Run
一次性参考,但我不推荐它)。
该 .Run()
应该由实例化执行 scmd
对象并传递命令行来执行。
这是一个我重命名了一些变量的例子(scmd
至 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
要考虑的事情
在Classic ASP中使用WScript.Shell运行可执行文件时,需要考虑一些事项;
运行命令将使用当前的应用程序池标识执行。
Run将在服务器上执行不在客户端(服务器端)的可执行文件。
如
>> WScript.Echo CreateObject("WScript.Shell").CurrentDirectory
>>
E:\trials\SoTrials\answers\trials\AlgoTaBu\SuSo\wsf
证明,没有任何规则或法律“你的 Set scmd
应该实例化WScript.Shell“。将命令放在字符串变量scmd(或者更好的sCmd)中执行,而不是为只使用一次的值创建一个变量是好的做法。
修订版(减去愚蠢的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
将与Lankymart的版本一样有效。
要拼出一切:
"site:stackoverflow.com vbscript "object required" Set"
结果1500次点击。即使这些命中很多都不关心 "Set x = 'non-object'
错误,这显然太多了。为了解释/原谅那些简易爆炸装置你必须考虑到BASIC是一种石器时代的语言。"Set x = 'non-object'
错了两次。如果它发生三次(或更频繁),他/她应该感到羞耻(并保持沉默)。最重要的是,这个问题不应该污染这个网站。WTF
Set x = " ---- stop or be damned!!!
Set x = obj.getNumber() + 4 ---- oh no!!!
我不确定,尝试改变
Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
至
Set scmd = "c:\windows\system32\cscript.exe" //nologo "c:\s.vbs"