2016-12-12 8 views
2

Interop.MSScriptControl.dll을 바꾸기 위해 CodeFluentRuntimeClient을 사용하기 시작했습니다.CodeFluent.RunTime.Client.dll - AccessViolationException

나는 그것을 작동시키기 위해 약간의 tweeking으로 here을 성공시킨다.

우리는 프로덕션 환경에서 dll을 사용하기 시작했습니다. 우리가 설치 한 컴퓨터 중 하나 (Windows server 2012)에서 Sytem.AccessViolationException이 발생했습니다.

enter image description here

enter image description here

마 CodeFluent 다른 DLL을 requieres :

다음은 이벤트 뷰어의 스택 추적입니까?

편집

이 여기에 코드입니다 :

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

코드를 게시했습니다. BTW,이 코드는 많은 기계에서 작동합니다. 그것은 하나의 기계에서만 깨진다. – billybob

+0

런타임의 코드는 기본적으로 여기에서 찾을 수있는 코드와 같습니다. http://stackoverflow.com/questions/4744105/parse-and-execute-js-by-c-sharp/24868314이 코드를 사용할 수 있습니까? 코드가 동일하게 실패하는지 확인하십시오. 그럴 경우 MarshalAs (UnmanagedType.LPWStr)]를 사용하여 ParseText의 문자열 매개 변수에 추가 할 수 있습니까? https://github.com/Taritsyn/MsieJavaScriptEngine/blob/master/src/MsieJavaScriptEngine/ActiveScript/IActiveScriptParse64 .cs –

답변

0

몇 가지 테스트 후, 우리는 클라이언트가 자신의 서버에 설치된 안티 바이러스 (스키)을 가지고 있다는 것을 발견했다. 바이러스 백신을 사용하지 않도록 설정 한 후에도 액세스 위반 오류가 계속 발생했습니다.

바이러스 백신을 제거한 후에 우리는 마침내 JavaScript를 실행할 수있었습니다. 구문 분석 할 스크립트를 차단하고있는 바이러스 백신에 어떤 규칙이 설정되었는지는 여전히 알 수 없습니다.

제안 된 솔루션에서 Simon Mounier으로 테스트하지 않았습니다. 나는 그것이 문제를 해결했을지 모르겠다.

해결책은 CodeFluent.Runtime.Client.dll을 삭제하고 here으로 제공된 소스 코드를 직접 사용하는 것입니다. 또한 here과 같이 구문 분석 함수에서 사용할 문자열 매개 변수 주위에 MarshalAs(UnmanagedType.LPWStr)]을 추가하십시오.