|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
#nullable disable
using Newtonsoft.Json;
using static Microsoft.Win32.Msi.Error;
namespace Microsoft.DotNet.Cli.Installer.Windows;
/// <summary>
/// Response message used by the elevated server when replying to a request from
/// the client process.
/// </summary>
internal class InstallResponseMessage : InstallMessageBase
{
public string Message
{
get;
set;
}
/// <summary>
/// The error code of the requested operation that failed. May be <see cref="SUCCESS"/> if
/// an HRESULT was set.
/// </summary>
public uint Error
{
get;
set;
}
/// <summary>
/// The HRESULT of the requested operation that failed.
/// </summary>
public int HResult
{
get;
set;
}
public Dictionary<string, string> GlobalJsonWorkloadSetVersions
{
get;
set;
}
/// <summary>
/// <see langword="true"/> if both <see cref="Error"/> and <see cref="HResult"/> indicates
/// a success result.
/// </summary>
public bool Succeeded => HResult == S_OK && Success(Error);
/// <summary>
/// Creates a new <see cref="InstallResponseMessage"/> from a sequence of bytes.
/// </summary>
/// <param name="bytes">The raw bytes to be converted.</param>
/// <returns>A new <see cref="InstallResponseMessage"/>.</returns>
public static InstallResponseMessage Create(byte[] bytes)
{
string json = Encoding.UTF8.GetString(bytes);
return JsonConvert.DeserializeObject<InstallResponseMessage>(json, DefaultSerializerSettings);
}
public static InstallResponseMessage Create(Exception e)
{
return new InstallResponseMessage
{
HResult = e.HResult,
Message = e.Message + Environment.NewLine + e.StackTrace,
};
}
}
|