ScriptControl的Eval方法有问题

时间:2013-06-25 20:45:38

标签: windows asp-classic vbscript

我在一个非常古老的经典ASP网络应用程序上得到了一些维护任务,当谈到VBScript时,我有点无能为力......

我想知道是否可以使用MSScriptControl.ScriptControl对象的Eval方法设置变量的值。另请注意,在调用Eval()之前使用ScriptControl的AddCode方法不是一个根据情况选择的选项。 以下是一些演示此问题的示例代码:

Dim so,rs,someVar
set someVar=...
set so=server.CreateObject("MSScriptControl.ScriptControl")
so.Language = "VBScript"
so.AllowUI = False
so.AddObject "someVar",someVar

' I get a syntax error here
rs = so.Eval(scrObject.Eval("set someVar = Nothing" & "set someVar = CreateObject("+Chr(34)+"Wscript.Shell"+Chr(34)+")" & "response.write(someVar.CurrentDirectory)"))

' if I try something like this I get a syntax error as well..
rs = so.Eval("Dim someVar2 : someVar2="+Chr(34)+"test"+Chr(34)+" : response.write(someVar2)")

我知道Eval方法用于计算表达式,而表达式不是用于声明或设置变量值的最合理的位置,但我想知道它是否仍然可能以某种方式存在。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

eval和“邪恶”不仅仅是相似的。无论如何你还需要eval什么?您应该可以直接使用代码:

Set someVar = Nothing
Set someVar = CreateObject("Wscript.Shell")
response.write(someVar.CurrentDirectory)

或(甚至更简单)像这样:

response.write CreateObject("Wscript.Shell").CurrentDirectory

答案 1 :(得分:0)

除了您的代码有非法分配外,您应该首先使用&字符连接字符串,而不是+字符:

rs = so.Eval(scrObject.Eval("set someVar = Nothing" & "set someVar = CreateObject(" & Chr(34) & "Wscript.Shell" & Chr(34) & ")" & "response.write(someVar.CurrentDirectory)"))

但现在你的输出将是一个字符串:

set someVar = Nothingset someVar = CreateObject("Wscript.Shell")response.write(someVar.CurrentDirectory)

这不是有效的VBScript。您可以使用换行符(vbNewLine)来分隔不同的行,但使用分号更容易:

rs = so.Eval(scrObject.Eval("set someVar = Nothing : set someVar = CreateObject(" & Chr(34) & "Wscript.Shell" & Chr(34) & ") : response.write(someVar.CurrentDirectory)"))

但就像Ansgar Wiecher问的那样:你想要实现什么目标?