Add support for language neutral VersionInfo in target .exes

Fixes #1644
This commit is contained in:
Mark Adamson
2020-12-27 14:58:00 +00:00
parent 76c87af6f3
commit 3cc10f1bac
4 changed files with 26 additions and 2 deletions

View File

@@ -70,8 +70,21 @@ namespace Squirrel
var buf = new byte[size];
if (!NativeMethods.GetFileVersionInfo(executable, 0, size, buf)) return null;
IntPtr result; int resultSize;
if (!NativeMethods.VerQueryValue(buf, "\\StringFileInfo\\040904B0\\SquirrelAwareVersion", out result, out resultSize)) {
const string englishUS = "040904B0";
const string neutral = "000004B0";
var supportedLanguageCodes = new[] {englishUS, neutral};
IntPtr result;
int resultSize;
if (!supportedLanguageCodes.Any(
languageCode =>
NativeMethods.VerQueryValue(
buf,
$"\\StringFileInfo\\{languageCode}\\SquirrelAwareVersion",
out result, out resultSize
)
))
{
return null;
}

View File

@@ -41,6 +41,17 @@ namespace Squirrel.Tests
Assert.Equal(1, ret.Value);
}
[Fact]
public void SquirrelAwareViaLanguageNeutralVersionBlock()
{
var target = IntegrationTestHelper.GetPath("fixtures", "SquirrelAwareNetCoreApp.exe");
Assert.True(File.Exists(target));
var ret = SquirrelAwareExecutableDetector.GetPESquirrelAwareVersion(target);
Assert.Equal(1, ret.Value);
}
[Fact]
public void SquirrelAwareViaAssemblyAttribute()
{

Binary file not shown.

Binary file not shown.