Ejemplo n.º 1
0
        protected VersionData GetVersion()
        {
            VersionData versionData = null;

            PEFile peFile = GetPEInfo();

            if (peFile != null)
            {
                try
                {
                    VsFixedFileInfo fileInfo = peFile.VersionInfo;
                    if (fileInfo != null)
                    {
                        versionData = fileInfo.ToVersionData();
                    }
                }
                catch (Exception ex) when(ex is InvalidVirtualAddressException || ex is BadInputFormatException)
                {
                    Trace.TraceError($"GetVersion: exception {ex.Message}");
                }
            }
            else
            {
                // If we can't get the version from the PE, search for version string embedded in the module data
                string versionString = VersionString;
                if (versionString != null)
                {
                    int spaceIndex = versionString.IndexOf(' ');
                    if (spaceIndex < 0)
                    {
                        // It is probably a private build version that doesn't end with a space (no commit id after)
                        spaceIndex = versionString.Length;
                    }
                    if (spaceIndex > 0)
                    {
                        if (versionString[spaceIndex - 1] == '.')
                        {
                            spaceIndex--;
                        }
                        string versionToParse = versionString.Substring(0, spaceIndex);
                        try
                        {
                            Version version = System.Version.Parse(versionToParse);
                            versionData = new VersionData(version.Major, version.Minor, version.Build, version.Revision);
                        }
                        catch (ArgumentException ex)
                        {
                            Trace.TraceError($"Module.GetVersion FAILURE: '{versionToParse}' '{versionString}' {ex}");
                        }
                    }
                }
                else
                {
                    Trace.TraceInformation($"Module.GetVersion no version string");
                }
            }

            return(versionData);
        }
Ejemplo n.º 2
0
        private IEnumerable <string> GetSpecialFiles()
        {
            var specialFiles = new List <string>(s_coreClrSpecialFiles);

            VsFixedFileInfo fileVersion = _peFile.VersionInfo;

            if (fileVersion != null)
            {
                ushort major    = fileVersion.ProductVersionMajor;
                ushort minor    = fileVersion.ProductVersionMinor;
                ushort build    = fileVersion.ProductVersionBuild;
                ushort revision = fileVersion.ProductVersionRevision;

                var    hostArchitectures  = new List <string>();
                string targetArchitecture = null;

                ImageFileMachine machine = (ImageFileMachine)_peFile.FileHeader.Machine;
                switch (machine)
                {
                case ImageFileMachine.Amd64:
                    targetArchitecture = "amd64";
                    break;

                case ImageFileMachine.I386:
                    targetArchitecture = "x86";
                    break;

                case ImageFileMachine.ArmNT:
                    targetArchitecture = "arm";
                    hostArchitectures.Add("x86");
                    break;

                case ImageFileMachine.Arm64:
                    targetArchitecture = "arm64";
                    hostArchitectures.Add("amd64");
                    break;
                }

                if (targetArchitecture != null)
                {
                    hostArchitectures.Add(targetArchitecture);

                    foreach (string hostArchitecture in hostArchitectures)
                    {
                        string buildFlavor = "";

                        if ((fileVersion.FileFlags & FileInfoFlags.Debug) != 0)
                        {
                            if ((fileVersion.FileFlags & FileInfoFlags.SpecialBuild) != 0)
                            {
                                buildFlavor = ".dbg";
                            }
                            else
                            {
                                buildFlavor = ".chk";
                            }
                        }

                        foreach (string name in s_longNameBinaryPrefixes)
                        {
                            // The name prefixes include the trailing "_".
                            string longName = string.Format("{0}{1}_{2}_{3}.{4}.{5}.{6:00}{7}.dll",
                                                            name, hostArchitecture, targetArchitecture, major, minor, build, revision, buildFlavor);
                            specialFiles.Add(longName);
                        }
                    }
                }
            }
            else
            {
                Tracer.Warning("{0} has no version resource", _path);
            }

            return(specialFiles);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Convert from symstore VsFixedFileInfo to DebugServices VersionData
 /// </summary>
 public static VersionData ToVersionData(this VsFixedFileInfo fileInfo)
 {
     return(new VersionData(fileInfo.FileVersionMajor, fileInfo.FileVersionMinor, fileInfo.FileVersionRevision, fileInfo.FileVersionBuild));
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Creates a default Windows VS_FIXEDFILEINFO structure.
 /// </summary>
 /// <returns>A default Windows VS_FIXEDFILEINFO.</returns>
 public static VsFixedFileInfo GetWindowsDefault()
 {
     VsFixedFileInfo fixedFileInfo = new VsFixedFileInfo();
     fixedFileInfo.Signature = ResourceWinVer.VS_FFI_SIGNATURE;
     fixedFileInfo.StrucVersion = ResourceWinVer.VS_FFI_STRUCVERSION;
     fixedFileInfo.FileFlagsMask = ResourceWinVer.VS_FFI_FILEFLAGSMASK;
     fixedFileInfo.FileOs = (uint)ResourceWinVer.FileOs.VOS__WINDOWS32;
     fixedFileInfo.FileSubtyp = (uint)ResourceWinVer.FileSubType.VFT2_UNKNOWN;
     fixedFileInfo.FileTyp = (uint)ResourceWinVer.FileType.VFT_DLL;
     return fixedFileInfo;
 }