2013-06-25 154 views
0

我得到了一個很舊的經典ASP Web應用程序的一些維護任務,我當它涉及到VBScript中有點無知......麻煩與ScriptControl的的eval方法

我不知道是否有可能設置的值一個使用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方法是爲計算表達式和表達式是不能用於聲明或設置變量的值最合理的地方,但我想知道如果它仍然有可能以某種方式。

非常感謝您的幫助。

回答

0

eval和「邪惡」不只是相似的聲音。無論如何,你需要什麼eval?您應該能夠直接使用的代碼:這樣

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

或(更簡單):

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

感謝您的回答,但並非如此簡單。使用ScriptControl似乎是唯一的方法。 –

+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)")) 

但就像安斯加爾Wiecher問:什麼是你想達到什麼目的?