private void ThrowScriptEngineException(string filename, ScriptEngineException e) { var message = m_Engine.GetStackTrace(); throw new MpdnScriptEngineException( string.Format("Error in render script ('{0}'):\r\n\r\n{1}", filename, string.IsNullOrEmpty(message) ? e.ErrorDetails : message)); }
private bool TryGetScriptError(Exception exception, out IScriptEngineException scriptError) { // WORKAROUND: Windows Script items often throw ugly exceptions. The code here // attempts to clean up specific cases. while (exception is TargetInvocationException) { exception = exception.InnerException; } scriptError = exception as IScriptEngineException; if (scriptError != null) { return true; } var comException = exception as COMException; if (comException != null) { var hr = comException.ErrorCode; if ((hr == RawCOMHelpers.HResult.SCRIPT_E_REPORTED) && (engine.CurrentScriptFrame != null)) { scriptError = engine.CurrentScriptFrame.ScriptError ?? engine.CurrentScriptFrame.PendingScriptError; if (scriptError != null) { return true; } } else if (RawCOMHelpers.HResult.GetFacility(hr) == RawCOMHelpers.HResult.FACILITY_CONTROL) { // These exceptions often have awful messages that include COM error codes. // The engine itself may be able to provide a better message. string message; if (engine.RuntimeErrorMap.TryGetValue(RawCOMHelpers.HResult.GetCode(hr), out message) && (message != exception.Message)) { scriptError = new ScriptEngineException(engine.Name, message, null, RawCOMHelpers.HResult.CLEARSCRIPT_E_SCRIPTITEMEXCEPTION, false, exception.InnerException); return true; } } else if (hr == RawCOMHelpers.HResult.DISP_E_MEMBERNOTFOUND) { // this usually indicates invalid object or property access in JScript scriptError = new ScriptEngineException(engine.Name, "Invalid object or property access", null, RawCOMHelpers.HResult.CLEARSCRIPT_E_SCRIPTITEMEXCEPTION, false, exception.InnerException); return true; } } else { var argumentException = exception as ArgumentException; if ((argumentException != null) && (argumentException.ParamName == null)) { // this usually indicates invalid object or property access in VBScript scriptError = new ScriptEngineException(engine.Name, "Invalid object or property access", null, RawCOMHelpers.HResult.CLEARSCRIPT_E_SCRIPTITEMEXCEPTION, false, exception.InnerException); return true; } } return false; }