CodeFluent.RunTime.Client.dll - AccessViolationException
CodeFluent.RunTime.Client.dll - AccessViolationException
我开始用CodeFluentRuntimeClient
代替Interop.MSScriptControl.dll
。
我成功地 修改了一些 dll 使其工作。
我们开始在生产中使用 dll。在我们安装的其中一台机器上(windows 服务器 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;
}
}
经过一些测试,我们发现客户在他的服务器上安装了杀毒软件(卡巴斯基)。即使在禁用防病毒软件后,访问冲突错误仍然存在。
卸载杀毒软件后,我们终于可以执行JavaScript了。我们仍然不知道在阻止要解析的脚本的防病毒软件中设置了什么规则。
我没有在 Simon Mounier 建议的解决方案中进行测试。不知道能不能解决问题
解决方案是删除 CodeFluent.Runtime.Client.dll
并直接使用提供的源代码 here. Also add MarshalAs(UnmanagedType.LPWStr)]
around the string parameters that are going to be used by the parse function, like in here。
我开始用CodeFluentRuntimeClient
代替Interop.MSScriptControl.dll
。
我成功地
我们开始在生产中使用 dll。在我们安装的其中一台机器上(windows 服务器 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;
}
}
经过一些测试,我们发现客户在他的服务器上安装了杀毒软件(卡巴斯基)。即使在禁用防病毒软件后,访问冲突错误仍然存在。
卸载杀毒软件后,我们终于可以执行JavaScript了。我们仍然不知道在阻止要解析的脚本的防病毒软件中设置了什么规则。
我没有在 Simon Mounier 建议的解决方案中进行测试。不知道能不能解决问题
解决方案是删除 CodeFluent.Runtime.Client.dll
并直接使用提供的源代码 here. Also add MarshalAs(UnmanagedType.LPWStr)]
around the string parameters that are going to be used by the parse function, like in here。