我开始使用CodeFluentRuntimeClient
来代替Interop.MSScriptControl.dll
。CodeFluent.RunTime.Client.dll - AccessViolationException
我成功here tweeking有点DLL使其工作。
我们开始在生产中使用dll。在我们安装的其中一台机器上(windows server 2012),我们遇到了Sytem.AccessViolationException。
这里的事件查看器的堆栈跟踪:
待办事项CodeFluent requieres任何其他DLL?
编辑
下面的代码:
public dynamic EvaluateVBScript(string token, string key, string script, IDictionary<string, object> parameterValuePair = null)
{
try
{
using (ScriptEngine engine = new ScriptEngine(ScriptEngine.VBScriptLanguage))
{
List<object> parameters = new List<object>() { string.IsNullOrEmpty(token) ? string.Empty : ServiceManager.GetService<IServiceInstance>().GetService<IContextManager>(token).UserName };
string extraParameters = string.Empty;
if (parameterValuePair != null && parameterValuePair.Count > 0)
{
extraParameters = "," + string.Join(",", parameterValuePair.Select(e => e.Key));
foreach (var para in parameterValuePair)
parameters.Add(para.Value);
}
string parsedScript = string.Format(@"Function {0}(NecUserProfile {2})
{1}
End Function", key, script, extraParameters);
ParsedScript parsed = engine.Parse(parsedScript);
dynamic value = parsed.CallMethod(key, parameters.ToArray());
return (value != null) ? value.ToString() : string.Empty;
}
}
catch
{
throw;
}
}
你可以发布你用来解析和执行脚本的代码吗? – meziantou
我发布了代码。顺便说一句,这段代码适用于很多机器。它只在一台机器上打破。 – billybob
在运行时的代码基本上是相同的,你可以在这里找到:http://stackoverflow.com/questions/4744105/parse-and-execute-js-by-c-sharp/24868314你可以尝试使用这个代码并查看它是否失败了?如果是这样,你可以在ParseText的字符串参数中添加MarshalAs(UnmanagedType.LPWStr)],就像在那里一样:https://github.com/Taritsyn/MsieJavaScriptEngine/blob/master/src/MsieJavaScriptEngine/ActiveScript/IActiveScriptParse64 .cs –