/// <summary> /// Instantiate a new MsiException with a given error. /// </summary> /// <param name="error">The error code from the MsiXxx() function call.</param> public MsiException(int error) : base(error) { uint handle = MsiInterop.MsiGetLastErrorRecord(); if (0 != handle) { using (Record record = new Record(handle)) { this.MsiError = record.GetInteger(1); int errorInfoCount = record.GetFieldCount() - 1; this.ErrorInfo = new string[errorInfoCount]; for (int i = 0; i < errorInfoCount; ++i) { this.ErrorInfo[i] = record.GetString(i + 2); } } } else { this.MsiError = 0; this.ErrorInfo = new string[0]; } this.Error = error; }