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);
        }
Beispiel #3
0
        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);
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #7
0
        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);
            }
        }
Beispiel #8
0
        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;
            }
        }