public void PersistentVarFileInfo() { // Prepare mock data. var versionInfo = new VersionInfoResource(); var varFileInfo = new VarFileInfo(); var table = new VarTable(); for (ushort i = 0; i < 10; i++) { table.Values.Add(i); } varFileInfo.Tables.Add(table); versionInfo.AddEntry(varFileInfo); // Serialize. var tempStream = new MemoryStream(); versionInfo.Write(new BinaryStreamWriter(tempStream)); // Reload. var newVersionInfo = VersionInfoResource.FromReader(new ByteArrayReader(tempStream.ToArray())); // Verify. var newVarFileInfo = newVersionInfo.GetChild <VarFileInfo>(VarFileInfo.VarFileInfoKey); Assert.NotNull(newVarFileInfo); Assert.Single(newVarFileInfo.Tables); var newTable = newVarFileInfo.Tables[0]; Assert.Equal(table.Values, newTable.Values); }
public void ReadFixedVersion() { var image = PEImage.FromBytes(Properties.Resources.HelloWorld); var versionInfo = VersionInfoResource.FromDirectory(image.Resources); var fixedVersionInfo = versionInfo.FixedVersionInfo; Assert.Equal(new System.Version(1, 0, 0, 0), fixedVersionInfo.FileVersion); Assert.Equal(new System.Version(1, 0, 0, 0), fixedVersionInfo.ProductVersion); }
public void PersistentStringFileInfo() { // Prepare mock data. var versionInfo = new VersionInfoResource(); var stringFileInfo = new StringFileInfo(); var table = new StringTable(0, 0x4b0) { [StringTable.ProductNameKey] = "Sample product", [StringTable.FileVersionKey] = "1.2.3.4", [StringTable.ProductVersionKey] = "1.0.0.0", [StringTable.FileDescriptionKey] = "This is a sample description" }; stringFileInfo.Tables.Add(table); versionInfo.AddEntry(stringFileInfo); // Serialize. var tempStream = new MemoryStream(); versionInfo.Write(new BinaryStreamWriter(tempStream)); // Reload. var infoReader = ByteArrayDataSource.CreateReader(tempStream.ToArray()); var newVersionInfo = VersionInfoResource.FromReader(ref infoReader); // Verify. var newStringFileInfo = newVersionInfo.GetChild <StringFileInfo>(StringFileInfo.StringFileInfoKey); Assert.NotNull(newStringFileInfo); Assert.Single(newStringFileInfo.Tables); var newTable = newStringFileInfo.Tables[0]; foreach ((string key, string value) in table) { Assert.Equal(value, newTable[key]); } }
public void PersistentVersionResource() { // Load dummy var image = PEImage.FromBytes(Properties.Resources.HelloWorld); // Update version info. var versionInfo = VersionInfoResource.FromDirectory(image.Resources); versionInfo.FixedVersionInfo.ProductVersion = new System.Version(1, 2, 3, 4); versionInfo.WriteToDirectory(image.Resources); // Rebuild using var stream = new MemoryStream(); new ManagedPEFileBuilder().CreateFile(image).Write(new BinaryStreamWriter(stream)); // Reload version info. var newImage = PEImage.FromBytes(stream.ToArray()); var newVersionInfo = VersionInfoResource.FromDirectory(newImage.Resources); // Verify. Assert.Equal(versionInfo.FixedVersionInfo.ProductVersion, newVersionInfo.FixedVersionInfo.ProductVersion); }
public void PersistentFixedVersionInfo() { // Prepare mock data. var versionInfo = new VersionInfoResource(); var fixedVersionInfo = new FixedVersionInfo { FileVersion = new System.Version(1, 2, 3, 4), ProductVersion = new System.Version(1, 2, 3, 4), FileDate = 0x12345678_9ABCDEF, FileFlags = FileFlags.SpecialBuild, FileFlagsMask = FileFlags.ValidBitMask, FileType = FileType.App, FileOS = FileOS.NT, FileSubType = FileSubType.DriverInstallable, }; versionInfo.FixedVersionInfo = fixedVersionInfo; // Serialize. var tempStream = new MemoryStream(); versionInfo.Write(new BinaryStreamWriter(tempStream)); // Reload. var infoReader = ByteArrayDataSource.CreateReader(tempStream.ToArray()); var newVersionInfo = VersionInfoResource.FromReader(ref infoReader); var newFixedVersionInfo = newVersionInfo.FixedVersionInfo; // Verify. Assert.Equal(fixedVersionInfo.FileVersion, newFixedVersionInfo.FileVersion); Assert.Equal(fixedVersionInfo.ProductVersion, newFixedVersionInfo.ProductVersion); Assert.Equal(fixedVersionInfo.FileDate, newFixedVersionInfo.FileDate); Assert.Equal(fixedVersionInfo.FileFlags, newFixedVersionInfo.FileFlags); Assert.Equal(fixedVersionInfo.FileFlagsMask, newFixedVersionInfo.FileFlagsMask); Assert.Equal(fixedVersionInfo.FileType, newFixedVersionInfo.FileType); Assert.Equal(fixedVersionInfo.FileOS, newFixedVersionInfo.FileOS); Assert.Equal(fixedVersionInfo.FileSubType, newFixedVersionInfo.FileSubType); }
public void ReadStringFileInfo() { string path = typeof(PEImage).Assembly.Location; var image = PEImage.FromFile(path); var versionInfo = VersionInfoResource.FromDirectory(image.Resources); var expectedInfo = FileVersionInfo.GetVersionInfo(path); var actualInfo = versionInfo.GetChild <StringFileInfo>(StringFileInfo.StringFileInfoKey); foreach ((string key, string value) in actualInfo.Tables[0]) { string expected = key switch { StringTable.CommentsKey => expectedInfo.Comments, StringTable.CompanyNameKey => expectedInfo.CompanyName, StringTable.FileDescriptionKey => expectedInfo.FileDescription, StringTable.FileVersionKey => expectedInfo.FileVersion, StringTable.InternalNameKey => expectedInfo.InternalName, StringTable.LegalCopyrightKey => expectedInfo.LegalCopyright, StringTable.LegalTrademarksKey => expectedInfo.LegalTrademarks, StringTable.OriginalFilenameKey => expectedInfo.OriginalFilename, StringTable.PrivateBuildKey => expectedInfo.PrivateBuild, StringTable.ProductNameKey => expectedInfo.ProductName, StringTable.ProductVersionKey => expectedInfo.ProductVersion, StringTable.SpecialBuildKey => expectedInfo.SpecialBuild, _ => null, }; if (expected is null) { continue; } Assert.Equal(expected, value); } }
private static int Main(string[] args) { var myName = Environment.GetCommandLineArgs()[0]; myName = Path.GetFileNameWithoutExtension(string.IsNullOrWhiteSpace(myName) ? System.Reflection.Assembly.GetEntryAssembly().Location : myName); if (args.Length != 2) { Console.WriteLine("Usage: " + myName + " <resource-script-template> <assembly-file>"); return(1); } Console.Write(WorkInProgress); try { var resourceScriptTemplateFileName = Environment.GetCommandLineArgs()[1]; var resourceScriptFileName = resourceScriptTemplateFileName.Replace(".template", string.Empty); var assemblyFileName = Environment.GetCommandLineArgs()[2]; var info = new VersionInfoResource(assemblyFileName); var text = File.ReadAllText(resourceScriptTemplateFileName). Replace("[vi:FileFlags]", info.FileFlags). Replace("[vi:FileVersion]", info.FileVersion). Replace("[vi:ProductVersion]", info.ProductVersion). Replace("[vi:StringFileInfo]", info.StringFileInfo); File.WriteAllText(resourceScriptFileName, text, Encoding.Unicode); Console.WriteLine(" done"); return(0); } catch (Exception exception) { Console.WriteLine(); Console.WriteLine("ERROR: " + myName + ": " + exception.Message + Environment.NewLine + exception.StackTrace); return(2); } }
private static int Main(string[] args) { var myName = Environment.GetCommandLineArgs()[0]; myName = Path.GetFileNameWithoutExtension(string.IsNullOrWhiteSpace(myName) ? System.Reflection.Assembly.GetEntryAssembly().Location : myName); if (args.Length != 2) { Console.WriteLine("Usage: " + myName + " <resource-script-template> <assembly-file>"); return 1; } Console.Write(WorkInProgress); try { var resourceScriptTemplateFileName = Environment.GetCommandLineArgs()[1]; var resourceScriptFileName = resourceScriptTemplateFileName.Replace(".template", string.Empty); var assemblyFileName = Environment.GetCommandLineArgs()[2]; var info = new VersionInfoResource(assemblyFileName); var text = File.ReadAllText(resourceScriptTemplateFileName). Replace("[vi:FileFlags]", info.FileFlags). Replace("[vi:FileVersion]", info.FileVersion). Replace("[vi:ProductVersion]", info.ProductVersion). Replace("[vi:StringFileInfo]", info.StringFileInfo); File.WriteAllText(resourceScriptFileName, text, Encoding.Unicode); Console.WriteLine(" done"); return 0; } catch (Exception exception) { Console.WriteLine(); Console.WriteLine("ERROR: " + myName + ": " + exception.Message + Environment.NewLine + exception.StackTrace); return 2; } }