Files
InnoPatcher/InnoHeaderV6.cs

237 lines
12 KiB
C#

using System;
using System.Runtime.InteropServices;
namespace InnoPatcher;
sealed class InnoHeaderV6 : IInnoHeader, IInnoSerializable
{
public string? AppName { get; set; }
public string? AppVerName { get; set; }
public string? AppId { get; set; }
public string? AppCopyright { get; set; }
public string? AppPublisher { get; set; }
public string? AppPublisherURL { get; set; }
public string? AppSupportPhone { get; set; }
public string? AppSupportURL { get; set; }
public string? AppUpdatesURL { get; set; }
public string? AppVersion { get; set; }
public string? DefaultDirName { get; set; }
public string? DefaultGroupName { get; set; }
public string? BaseFilename { get; set; }
public string? UninstallFilesDir { get; set; }
public string? UninstallDisplayName { get; set; }
public string? UninstallDisplayIcon { get; set; }
public string? AppMutex { get; set; }
public string? DefaultUserInfoName { get; set; }
public string? DefaultUserInfoOrg { get; set; }
public string? DefaultUserInfoSerial { get; set; }
public string? AppReadmeFile { get; set; }
public string? AppContact { get; set; }
public string? AppComments { get; set; }
public string? AppModifyPath { get; set; }
public string? CreateUninstallRegKey { get; set; }
public string? Uninstallable { get; set; }
public string? CloseApplicationsFilter { get; set; }
public string? SetupMutex { get; set; }
public string? ChangesEnvironment { get; set; }
public string? ChangesAssociations { get; set; }
private byte[]? _licenseText;
public ReadOnlySpan<byte> LicenseText { get => _licenseText; set { _licenseText = value.ToArray(); } }
private byte[]? _infoBeforeText;
public ReadOnlySpan<byte> InfoBeforeText { get => _infoBeforeText; set { _infoBeforeText = value.ToArray(); } }
private byte[]? _infoAfterText;
public ReadOnlySpan<byte> InfoAfterText { get => _infoAfterText; set { _infoAfterText = value.ToArray(); } }
private byte[]? _compiledCodeText;
public ReadOnlySpan<byte> CompiledCodeText { get => _compiledCodeText; set { _compiledCodeText = value.ToArray(); } }
private Primitives _primitives;
public int NumLanguageEntries { get => _primitives.NumLanguageEntries; set => _primitives.NumLanguageEntries = value; }
public int NumCustomMessageEntries { get => _primitives.NumCustomMessageEntries; set => _primitives.NumCustomMessageEntries = value; }
public int NumPermissionEntries { get => _primitives.NumPermissionEntries; set => _primitives.NumPermissionEntries = value; }
public int NumTypeEntries { get => _primitives.NumTypeEntries; set => _primitives.NumTypeEntries = value; }
public int NumComponentEntries { get => _primitives.NumComponentEntries; set => _primitives.NumComponentEntries = value; }
public int NumTaskEntries { get => _primitives.NumTaskEntries; set => _primitives.NumTaskEntries = value; }
public int NumDirEntries { get => _primitives.NumDirEntries; set => _primitives.NumDirEntries = value; }
public int NumFileEntries { get => _primitives.NumFileEntries; set => _primitives.NumFileEntries = value; }
public int NumFileLocationEntries { get => _primitives.NumFileLocationEntries; set => _primitives.NumFileLocationEntries = value; }
public int NumIconEntries { get => _primitives.NumIconEntries; set => _primitives.NumIconEntries = value; }
public int NumIniEntries { get => _primitives.NumIniEntries; set => _primitives.NumIniEntries = value; }
public int NumRegistryEntries { get => _primitives.NumRegistryEntries; set => _primitives.NumRegistryEntries = value; }
public int NumInstallDeleteEntries { get => _primitives.NumInstallDeleteEntries; set => _primitives.NumInstallDeleteEntries = value; }
public int NumUninstallDeleteEntries { get => _primitives.NumUninstallDeleteEntries; set => _primitives.NumUninstallDeleteEntries = value; }
public int NumRunEntries { get => _primitives.NumRunEntries; set => _primitives.NumRunEntries = value; }
public int NumUninstallRunEntries { get => _primitives.NumUninstallRunEntries; set => _primitives.NumUninstallRunEntries = value; }
public InnoVersionData MinVersion { get => _primitives.MinVersion; set => _primitives.MinVersion = value; }
public InnoVersionData OnlyBelowVersion { get => _primitives.OnlyBelowVersion; set => _primitives.OnlyBelowVersion = value; }
public int BackColor { get => _primitives.BackColor; set => _primitives.BackColor = value; }
public int BackColor2 { get => _primitives.BackColor2; set => _primitives.BackColor2 = value; }
public InnoWizardStyle WizardStyle { get => _primitives.WizardStyle; set => _primitives.WizardStyle = value; }
public int WizardSizePercentX { get => _primitives.WizardSizePercentX; set => _primitives.WizardSizePercentX = value; }
public int WizardSizePercentY { get => _primitives.WizardSizePercentY; set => _primitives.WizardSizePercentY = value; }
public InnoAlphaFormat WizardImageAlphaFormat { get => _primitives.WizardImageAlphaFormat; set => _primitives.WizardImageAlphaFormat = value; }
public InnoSha1Digest PasswordHash { get => _primitives.PasswordHash; set => _primitives.PasswordHash = value; }
public InnoSalt PasswordSalt { get => _primitives.PasswordSalt; set => _primitives.PasswordSalt = value; }
public long ExtraDiskSpaceRequired { get => _primitives.ExtraDiskSpaceRequired; set => _primitives.ExtraDiskSpaceRequired = value; }
public int SlicesPerDisk { get => _primitives.SlicesPerDisk; set => _primitives.SlicesPerDisk = value; }
public InnoLogMode UninstallLogMode { get => _primitives.UninstallLogMode; set => _primitives.UninstallLogMode = value; }
public InnoAutoNoYes DirExistsWarning { get => _primitives.DirExistsWarning; set => _primitives.DirExistsWarning = value; }
public InnoPrivilegesRequired PrivilegesRequired { get => _primitives.PrivilegesRequired; set => _primitives.PrivilegesRequired = value; }
public InnoPrivilegesRequiredOverride PrivilegesRequiredOverridesAllowed { get => _primitives.PrivilegesRequiredOverridesAllowed; set => _primitives.PrivilegesRequiredOverridesAllowed = value; }
public InnoYesNoAuto ShowLanguageDialog { get => _primitives.ShowLanguageDialog; set => _primitives.ShowLanguageDialog = value; }
public InnoLanguageDetectionMethod LanguageDetectionMethod { get => _primitives.LanguageDetectionMethod; set => _primitives.LanguageDetectionMethod = value; }
public InnoCompressMethod CompressMethod { get => _primitives.CompressMethod; set => _primitives.CompressMethod = value; }
public InnoProcessorArchitecture ArchitecturesAllowed { get => _primitives.ArchitecturesAllowed; set => _primitives.ArchitecturesAllowed = value; }
public InnoProcessorArchitecture ArchitecturesInstallIn64BitMode { get => _primitives.ArchitecturesInstallIn64BitMode; set => _primitives.ArchitecturesInstallIn64BitMode = value; }
public InnoDisablePage DisableDirPage { get => _primitives.DisableDirPage; set => _primitives.DisableDirPage = value; }
public InnoDisablePage DisableProgramGroupPage { get => _primitives.DisableProgramGroupPage; set => _primitives.DisableProgramGroupPage = value; }
public long UninstallDisplaySize { get => _primitives.UninstallDisplaySize; set => _primitives.UninstallDisplaySize = value; }
public InnoHeaderOption Options { get => _primitives.Options; set => _primitives.Options = value; }
#region IInnoSerializable Members
public int StringCount => 30;
public int ByteArrayCount => 4;
public int PrimitiveSize => Marshal.SizeOf<Primitives>();
public string? GetString(int idx)
{
switch (idx)
{
case 0: return AppName;
case 1: return AppVerName;
case 2: return AppId;
case 3: return AppCopyright;
case 4: return AppPublisher;
case 5: return AppPublisherURL;
case 6: return AppSupportPhone;
case 7: return AppSupportURL;
case 8: return AppUpdatesURL;
case 9: return AppVersion;
case 10: return DefaultDirName;
case 11: return DefaultGroupName;
case 12: return BaseFilename;
case 13: return UninstallFilesDir;
case 14: return UninstallDisplayName;
case 15: return UninstallDisplayIcon;
case 16: return AppMutex;
case 17: return DefaultUserInfoName;
case 18: return DefaultUserInfoOrg;
case 19: return DefaultUserInfoSerial;
case 20: return AppReadmeFile;
case 21: return AppContact;
case 22: return AppComments;
case 23: return AppModifyPath;
case 24: return CreateUninstallRegKey;
case 25: return Uninstallable;
case 26: return CloseApplicationsFilter;
case 27: return SetupMutex;
case 28: return ChangesEnvironment;
case 29: return ChangesAssociations;
default: throw new ArgumentOutOfRangeException();
}
}
public void SetString(int idx, string? value)
{
switch (idx)
{
case 0: AppName = value; break;
case 1: AppVerName = value; break;
case 2: AppId = value; break;
case 3: AppCopyright = value; break;
case 4: AppPublisher = value; break;
case 5: AppPublisherURL = value; break;
case 6: AppSupportPhone = value; break;
case 7: AppSupportURL = value; break;
case 8: AppUpdatesURL = value; break;
case 9: AppVersion = value; break;
case 10: DefaultDirName = value; break;
case 11: DefaultGroupName = value; break;
case 12: BaseFilename = value; break;
case 13: UninstallFilesDir = value; break;
case 14: UninstallDisplayName = value; break;
case 15: UninstallDisplayIcon = value; break;
case 16: AppMutex = value; break;
case 17: DefaultUserInfoName = value; break;
case 18: DefaultUserInfoOrg = value; break;
case 19: DefaultUserInfoSerial = value; break;
case 20: AppReadmeFile = value; break;
case 21: AppContact = value; break;
case 22: AppComments = value; break;
case 23: AppModifyPath = value; break;
case 24: CreateUninstallRegKey = value; break;
case 25: Uninstallable = value; break;
case 26: CloseApplicationsFilter = value; break;
case 27: SetupMutex = value; break;
case 28: ChangesEnvironment = value; break;
case 29: ChangesAssociations = value; break;
default: throw new ArgumentOutOfRangeException();
}
}
public ReadOnlySpan<byte> GetByteArray(int idx)
{
switch (idx) {
case 0: return _licenseText;
case 1: return _infoBeforeText;
case 2: return _infoAfterText;
case 3: return _compiledCodeText;
default: throw new ArgumentOutOfRangeException();
}
}
public void SetByteArray(int idx, ReadOnlySpan<byte> value)
{
switch (idx) {
case 0: _licenseText = value.ToArray(); break;
case 1: _infoBeforeText = value.ToArray(); break;
case 2: _infoAfterText = value.ToArray(); break;
case 3: _compiledCodeText = value.ToArray(); break;
default: throw new ArgumentOutOfRangeException();
}
}
public ReadOnlySpan<byte> GetPrimitive()
{
return MemoryMarshal.Cast<Primitives, byte>(new ReadOnlySpan<Primitives>(ref _primitives));
}
public void SetPrimitive(ReadOnlySpan<byte> raw)
{
_primitives = MemoryMarshal.Cast<byte, Primitives>(raw)[0];
}
#endregion
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct Primitives {
internal int NumLanguageEntries, NumCustomMessageEntries, NumPermissionEntries,
NumTypeEntries, NumComponentEntries, NumTaskEntries, NumDirEntries,
NumFileEntries, NumFileLocationEntries, NumIconEntries, NumIniEntries,
NumRegistryEntries, NumInstallDeleteEntries, NumUninstallDeleteEntries,
NumRunEntries, NumUninstallRunEntries; // Integer
internal InnoVersionData MinVersion, OnlyBelowVersion;
internal int BackColor, BackColor2; // Longint
internal InnoWizardStyle WizardStyle;
internal int WizardSizePercentX, WizardSizePercentY; // Integer
internal InnoAlphaFormat WizardImageAlphaFormat;
internal InnoSha1Digest PasswordHash;
internal InnoSalt PasswordSalt; // TSetupSalt
internal long ExtraDiskSpaceRequired; // Integer64
internal int SlicesPerDisk; // Integer
internal InnoLogMode UninstallLogMode;
internal InnoAutoNoYes DirExistsWarning;
internal InnoPrivilegesRequired PrivilegesRequired;
internal InnoPrivilegesRequiredOverride PrivilegesRequiredOverridesAllowed;
internal InnoYesNoAuto ShowLanguageDialog;
internal InnoLanguageDetectionMethod LanguageDetectionMethod;
internal InnoCompressMethod CompressMethod;
internal InnoProcessorArchitecture ArchitecturesAllowed, ArchitecturesInstallIn64BitMode;
internal InnoDisablePage DisableDirPage, DisableProgramGroupPage;
internal long UninstallDisplaySize; // Integer64
internal InnoHeaderOption Options;
}
}