【发布时间】:2016-12-14 00:31:40
【问题描述】:
我开始使用CodeFluentRuntimeClient 代替Interop.MSScriptControl.dll。
我成功了here,方法是稍微调整一下 dll 以使其工作。
我们开始在生产中使用 dll。在我们安装的其中一台机器(windows server 2012)上,我们遇到了 Sytem.AccessViolationException。
这是事件查看器的堆栈跟踪:
CodeFluent 是否需要任何其他 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;
}
}
【问题讨论】:
-
你能贴出你用来解析和执行脚本的代码吗?
-
我发布了代码。顺便说一句,这段代码适用于很多机器。它只在一台机器上中断。
-
运行时中的代码与您可以在此处找到的代码基本相同:stackoverflow.com/questions/4744105/… 您可以尝试使用此代码,看看它是否同样失败?如果是这样,您可以尝试在 ParseText 中的字符串参数周围添加 MarshalAs(UnmanagedType.LPWStr)] 吗,例如:github.com/Taritsyn/MsieJavaScriptEngine/blob/master/src/…
-
我今天会试一试,然后回来提供反馈。顺便说一句,您是否希望我删除 CodeFluent.Runtime.Client.dll 并直接使用您提供给我的代码?
标签: c# access-violation codefluent