C# CodeFluent.RunTime.Client.dll-AccessViolationException
我开始使用C# CodeFluent.RunTime.Client.dll-AccessViolationException,c#,access-violation,codefluent,C#,Access Violation,Codefluent,我开始使用CodeFluentRuntimeClient替换Interop.MSScriptControl.dll 我成功地在dll上花了一点时间使它工作 我们开始在生产中使用dll。在我们安装的其中一台计算机(windows server 2012)上,我们有一个Sytem.AccessViolationException 以下是事件查看器的堆栈跟踪: CodeFluent是否需要其他DLL 编辑 代码如下: public dynamic EvaluateVBScript(string t
CodeFluentRuntimeClient
替换Interop.MSScriptControl.dll
我成功地在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;
}
}
公共动态EvaluateVBScript(字符串标记、字符串键、字符串脚本、IDictionary参数ValuePair=null)
{
尝试
{
使用(ScriptEngine=new ScriptEngine(ScriptEngine.VBScriptLanguage))
{
列表参数=新列表(){string.IsNullOrEmpty(令牌)?string.Empty:ServiceManager.GetService().GetService(令牌).UserName};
string extraParameters=string.Empty;
if(parameterValuePair!=null&¶meterValuePair.Count>0)
{
extraParameters=“,”+string.Join(“,”,parameterValuePair.Select(e=>e.Key));
foreach(参数valuepair中的变量para)
参数。添加(参数值);
}
string parsedScript=string.Format(@“函数{0}(NecUserProfile{2}))
{1}
“结束函数”,键、脚本、外部参数);
ParsedScript parsed=engine.Parse(ParsedScript);
动态值=parsed.CallMethod(key,parameters.ToArray());
return(value!=null)?value.ToString():string.Empty;
}
}
抓住
{
投掷;
}
}
经过一些测试,我们发现客户端的服务器上安装了防病毒软件(卡巴斯基)。即使在禁用防病毒软件后,访问冲突错误仍在发生
卸载防病毒软件后,我们终于能够执行JavaScript了。我们仍然不知道在防病毒程序中设置了什么规则来阻止要解析的脚本
我没有按建议的解决方案进行测试。我不知道它是否能解决这个问题
解决方案是退出
CodeFluent.Runtime.Client.dll
,直接使用提供的源代码。另外,在解析函数将要使用的字符串参数周围添加marshallas(UnmanagedType.LPWStr)]
,如中所示。您可以发布用于解析和执行脚本的代码吗?我发布了代码。顺便说一句,这段代码在很多机器上都有效。它只在一台机器上中断。运行时中的代码基本上与您在此处找到的代码相同:您是否可以尝试使用此代码并查看它是否失败?如果是这样的话,您是否可以尝试在ParseText中的字符串参数周围添加Marshallas(UnmanagedType.LPWStr)],就像在那里一样:我今天将尝试一下,并返回一个反馈。顺便问一下,你想让我删除CodeFluent.Runtime.Client.dll并直接使用你提供给我的代码吗?