MegaBites-AI/Windows-powershell
0372
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4using System.Reflection;5using System.Runtime.Serialization;6using System.Security.Permissions;7 8namespace System.Management.Automation.Runspaces9{10 /// <summary>11 /// Defines exception thrown when a PSSnapin was not able to load into current runspace.12 /// </summary>13 /// <!--14 /// Implementation of PSSnapInException requires it to15 /// 1. Implement IContainsErrorRecord,16 /// 2. ISerializable17 ///18 /// Basic information for this exception includes,19 /// 1. PSSnapin name20 /// 2. Inner exception.21 /// -->22 public class PSSnapInException : RuntimeException23 {24 /// <summary>25 /// Initiate an instance of PSSnapInException.26 /// </summary>27 /// <param name="PSSnapin">PSSnapin for the exception.</param>28 /// <param name="message">Message with load failure detail.</param>29 internal PSSnapInException(string PSSnapin, string message)30 : base()31 {32 _PSSnapin = PSSnapin;33 _reason = message;34 CreateErrorRecord();35 }36 37 /// <summary>38 /// Initiate an instance of PSSnapInException.39 /// </summary>40 /// <param name="PSSnapin">PSSnapin for the exception.</param>41 /// <param name="message">Message with load failure detail.</param>42 /// <param name="warning">Whether this is just a warning for PSSnapin load.</param>43 internal PSSnapInException(string PSSnapin, string message, bool warning)44 : base()45 {46 _PSSnapin = PSSnapin;47 _reason = message;48 _warning = warning;49 CreateErrorRecord();50 }51 52 /// <summary>53 /// Initiate an instance of PSSnapInException.54 /// </summary>55 /// <param name="PSSnapin">PSSnapin for the exception.</param>56 /// <param name="message">Message with load failure detail.</param>57 /// <param name="exception">Exception for PSSnapin load failure.</param>58 internal PSSnapInException(string PSSnapin, string message, Exception exception)59 : base(message, exception)60 {61 _PSSnapin = PSSnapin;62 _reason = message;63 CreateErrorRecord();64 }65 66 /// <summary>67 /// Initiate an instance of PSSnapInException.68 /// </summary>69 public PSSnapInException() : base()70 {71 }72 73 /// <summary>74 /// Initiate an instance of PSSnapInException.75 /// </summary>76 /// <param name="message">Error message.</param>77 public PSSnapInException(string message)78 : base(message)79 {80 }81 82 /// <summary>83 /// Initiate an instance of PSSnapInException.84 /// </summary>85 /// <param name="message">Error message.</param>86 /// <param name="innerException">Inner exception.</param>87 public PSSnapInException(string message, Exception innerException)88 : base(message, innerException)89 {90 }91 92 /// <summary>93 /// Create the internal error record.94 /// The ErrorRecord created will be stored in the _errorRecord member.95 /// </summary>96 private void CreateErrorRecord()97 {98 // if _PSSnapin or _reason is empty, this exception is created using default99 // constructor. Don't create the error record since there is100 // no useful information anyway.101 if (!string.IsNullOrEmpty(_PSSnapin) && !string.IsNullOrEmpty(_reason))102 {103 Assembly currentAssembly = typeof(PSSnapInException).Assembly;104 105 if (_warning)106 {107 _errorRecord = new ErrorRecord(new ParentContainsErrorRecordException(this), "PSSnapInLoadWarning", ErrorCategory.ResourceUnavailable, null);108 _errorRecord.ErrorDetails = new ErrorDetails(string.Format(ConsoleInfoErrorStrings.PSSnapInLoadWarning, _PSSnapin, _reason));109 }110 else111 {112 _errorRecord = new ErrorRecord(new ParentContainsErrorRecordException(this), "PSSnapInLoadFailure", ErrorCategory.ResourceUnavailable, null);113 _errorRecord.ErrorDetails = new ErrorDetails(string.Format(ConsoleInfoErrorStrings.PSSnapInLoadFailure, _PSSnapin, _reason));114 }115 }116 }117 118 private readonly bool _warning = false;119 120 private ErrorRecord _errorRecord;121 private bool _isErrorRecordOriginallyNull;122 123 /// <summary>124 /// Gets error record embedded in this exception.125 /// </summary>126 /// <!--127 /// This property is required as part of IErrorRecordContainer128 /// interface.129 /// -->130 public override ErrorRecord ErrorRecord131 {132 get133 {134 if (_errorRecord == null)135 {136 _isErrorRecordOriginallyNull = true;137 _errorRecord = new ErrorRecord(138 new ParentContainsErrorRecordException(this),139 "PSSnapInException",140 ErrorCategory.NotSpecified,141 null);142 }143 144 return _errorRecord;145 }146 }147 148 private readonly string _PSSnapin = string.Empty;149 private readonly string _reason = string.Empty;150 151 /// <summary>152 /// Gets message for this exception.153 /// </summary>154 public override string Message155 {156 get157 {158 if (_errorRecord != null && !_isErrorRecordOriginallyNull)159 {160 return _errorRecord.ToString();161 }162 163 return base.Message;164 }165 }166 167 #region Serialization168 169 /// <summary>170 /// Initiate a PSSnapInException instance.171 /// </summary>172 /// <param name="info">Serialization information.</param>173 /// <param name="context">Streaming context.</param>174 [Obsolete("Legacy serialization support is deprecated since .NET 8", DiagnosticId = "SYSLIB0051")]175 protected PSSnapInException(SerializationInfo info,176 StreamingContext context)177 {178 throw new NotSupportedException();179 }180 181 #endregion Serialization182 }183}184 