【问题标题】:CodeFluent.RunTime.Client.dll - AccessViolationExceptionCodeFluent.RunTime.Client.dll - AccessViolationException
【发布时间】: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


【解决方案1】:

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

卸载防病毒软件后,我们终于能够执行 JavaScript。我们仍然不知道防病毒软件中设置了什么规则阻止了要解析的脚本。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多