Refactor Setup Factory detection (#115)

* Refactor Setup Factory detection

* Address Setup Factory PR comments

* Fix whitespace
This commit is contained in:
SilasLaspada
2022-04-01 10:58:02 -06:00
committed by GitHub
parent 35acb77bf7
commit edc4cc1706
2 changed files with 24 additions and 6 deletions

View File

@@ -19,14 +19,20 @@ namespace BurnOutSharp.PackerType
if (sections == null)
return null;
// Known to detect versions 7.0.5.1 - 9.1.0.0
string name = Utilities.GetLegalCopyright(pex);
if (!string.IsNullOrWhiteSpace(name) && name.StartsWith("Setup Factory", StringComparison.OrdinalIgnoreCase))
if (!string.IsNullOrWhiteSpace(name) && name.StartsWith("Setup Engine", StringComparison.OrdinalIgnoreCase))
return $"Setup Factory {GetVersion(pex)}";
name = Utilities.GetProductName(pex);
if (!string.IsNullOrWhiteSpace(name) && name.StartsWith("Setup Factory", StringComparison.OrdinalIgnoreCase))
return $"Setup Factory {GetVersion(pex)}";
// Known to detect version 5.0.1 - 6.0.1.3
name = Utilities.GetFileDescription(pex);
if (!string.IsNullOrWhiteSpace(name) && name.StartsWith("Setup Factory", StringComparison.OrdinalIgnoreCase))
return $"Setup Factory {GetVersion(pex)}";
// Longer version of the check that can be used if false positves become an issue:
// "Setup Factory is a trademark of Indigo Rose Corporation"
@@ -55,16 +61,21 @@ namespace BurnOutSharp.PackerType
private string GetVersion(PortableExecutable pex)
{
// Check the manifest version first
string version = Utilities.GetManifestVersion(pex);
// Check the product version first
string version = Utilities.GetProductVersion(pex);
if (!string.IsNullOrEmpty(version))
return version;
// Then check the file version
version = Utilities.GetFileVersion(pex);
if (!string.IsNullOrEmpty(version))
return version;
// Then check the manifest version
version = Utilities.GetManifestVersion(pex);
if (!string.IsNullOrEmpty(version))
return version;
return "(Unknown Version)";
}
}

View File

@@ -237,9 +237,9 @@ namespace BurnOutSharp.Tools
if (!string.IsNullOrWhiteSpace(version))
return version.Replace(", ", ".");
version = GetResourceString(pex, "ProductVersion");
version = GetProductVersion(pex);
if (!string.IsNullOrWhiteSpace(version))
return version.Replace(", ", ".");
return version;
return null;
}
@@ -366,6 +366,13 @@ namespace BurnOutSharp.Tools
/// <returns>Product name string, null on error</returns>
public static string GetProductName(PortableExecutable pex) => GetResourceString(pex, "ProductName");
/// <summary>
/// Get the product name as reported by the filesystem
/// </summary>
/// <param name="pex">PortableExecutable representing the file contents</param>
/// <returns>Product version string, null on error</returns>
public static string GetProductVersion(PortableExecutable pex) => GetResourceString(pex, "ProductVersion")?.Replace(", ", ".");
/// <summary>
/// Find resource data in a ResourceSection, if possible
/// </summary>