2016-12-12 60 views
2

我开始使用CodeFluentRuntimeClient来代替Interop.MSScriptControl.dllCodeFluent.RunTime.Client.dll - AccessViolationException

我成功here tweeking有点DLL使其工作。

我们开始在生产中使用dll。在我们安装的其中一台机器上(windows server 2012),我们遇到了Sytem.AccessViolationException。

这里的事件查看器的堆栈跟踪:

enter image description here

enter image description here

待办事项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; 
    } 
} 
+0

你可以发布你用来解析和执行脚本的代码吗? – meziantou

+0

我发布了代码。顺便说一句,这段代码适用于很多机器。它只在一台机器上打破。 – billybob

+0

在运行时的代码基本上是相同的,你可以在这里找到: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 –

回答

0

一些测试后,我们发现客户端已经安装了服务器上的防病毒(卡巴斯基)。即使在禁用防病毒之后,访问冲突错误仍然在发生。

卸载杀毒软件后,我们终于可以执行JavaScript了。我们仍然不知道防病毒中设置了哪些规则来阻止脚本进行解析。

我没有在建议的解决方案中使用Simon Mounier进行测试。我不知道它是否能解决问题。

解决方案是剔除CodeFluent.Runtime.Client.dll并直接使用提供的源代码here。还要在解析函数将要使用的字符串参数周围添加MarshalAs(UnmanagedType.LPWStr)],如here

相关问题