在分配中使用Set时"需要对象"

el *_*nho 13 vbscript asp-classic

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
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

Object required: '[string: "c:\windows\system32\"]' Code 800A01A8

Lan*_*art 13

更新

因为不清楚是否最好指出你的Object Required问题是由于这一行

Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
Run Code Online (Sandbox Code Playgroud)

这是因为一个对象预期,但要指定一个字符串,通过删除Set你的代码将工作(如Ekkehard.Horner已经指出的).


以下是我对情况的解释.首先看一下你的代码,它看起来几乎把WScript.Shell对象的实例化与方法的命令行混合在了一起.Run().这是我第一次尝试分解代码,重新排列然后将其重新组合在一起.


原始答案

  1. Set scmd应该实例化WScript.Shell(因为Ekkehard.Horner指出你可以用Server.CreateObject("WScript.Shell").Run一次性参考,但我不推荐它).

  2. .Run()应该由实例化来执行scmd对象,并通过命令行来执行.

这里是我已经改名一些变量(一个例子scmdcmd举例).

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
Run Code Online (Sandbox Code Playgroud)

要考虑的事情

在Classic ASP中使用WScript.Shell运行可执行文件时,需要考虑一些事项;

  1. 运行命令将使用当前的应用程序池标识执行.

  2. Run将在服务器上执行不在客户端(服务器端)的可执行文件.


小智 -3

我不确定,尝试改变

Set scmd = "c:\windows\system32\cscript.exe //nologo c:\s.vbs"
Run Code Online (Sandbox Code Playgroud)

Set scmd = "c:\windows\system32\cscript.exe" //nologo "c:\s.vbs"
Run Code Online (Sandbox Code Playgroud)

  • -1:甚至语法都不正确;在非对象赋值中使用 Set 是明显错误的。 (2认同)