private static void DoCheckFileProperties(FileInfo fileInfo)
            {
                if (fileInfo == null || !fileInfo.Exists)
                {
                    return;
                }

                lock (FileCheckingLock)
                {
                    var checksum = Sha1.GetInstance().GenerateInHex(fileInfo);
                    var version  = GetVersionFrom(checksum);
                    if (!UnknownVersion.Equals(version))
                    {
                        Logger.GetInstance(typeof(DefaultOpenVRManager)).Debug($"{fileInfo.FullName}, sha1: {checksum}, version: {version}");
                        return;
                    }
                    Logger.GetInstance(typeof(DefaultOpenVRManager)).Warn($"{fileInfo.FullName}, sha1: {checksum}, version: {version}");

                    var sourceFileName = fileInfo.FullName;
                    var destFileName   = $"{sourceFileName}_{Convert.ToTimestampInMilli(DateTime.UtcNow)}.bak";
                    try
                    {
                        File.Move(sourceFileName, destFileName);
                    }
                    catch (Exception e)
                    {
                        Logger.GetInstance(typeof(DefaultOpenVRManager)).Error($"Can not move unknown \"{sourceFileName}\" to \"{destFileName}\". {e}");
                    }
                }
            }
            private static string PrepareBinary(string resourceName, string platformName, string binaryName)
            {
                if (string.IsNullOrWhiteSpace(binaryName))
                {
                    return(null);
                }

                var binaryPath = GetBinaryFilePath(platformName, binaryName);

                if (string.IsNullOrWhiteSpace(binaryPath))
                {
                    Logger.GetInstance(typeof(DefaultOpenVRManager)).Error("Can not find binary path to load");
                    return(null);
                }

                lock (FileExtractingLock)
                {
                    if (File.Exists(binaryPath))
                    {
                        CheckFileProperties(new FileInfo(binaryPath));
                        return(binaryPath);
                    }

                    var tempBinaryPath = $"{binaryPath}.{Convert.ToTimestampInMilli(DateTime.UtcNow)}";

                    Extract.FromAssemblyToFileByResourceName(
                        resourceName,
                        new FileInfo(tempBinaryPath),
                        Extract.CompressionType.Gzip
                        );

                    if (!File.Exists(binaryPath) && File.Exists(tempBinaryPath))
                    {
                        try
                        {
                            File.Move(tempBinaryPath, binaryPath);
                        }
                        catch (Exception e)
                        {
                            Logger.GetInstance(typeof(DefaultOpenVRManager)).Error($"Can not move file from \"{tempBinaryPath}\". {e}");
                        }
                    }

                    if (File.Exists(binaryPath))
                    {
                        CheckFileProperties(new FileInfo(binaryPath));
                        return(binaryPath);
                    }
                }

                return(null);
            }