Exemple #1
0
        public bool CheckFile(ResourceManagerTokenCacheImpl resourceManagerTokenCacheImpl, out long resourceManagerTokensOffset)
        {
            resourceManagerTokensOffset = -1;
            stream.Position             = 0;
            var reader = new BinaryReader(stream);

            if (reader.ReadUInt32() != SIG)
            {
                return(false);
            }

            if (!CheckFile(reader, GetPathToClrDll()))
            {
                return(false);
            }
            if (!CheckAssembly(reader, typeof(void).Assembly))
            {
                return(false);
            }

            if (reader.ReadInt32() != assemblies.Length)
            {
                return(false);
            }
            foreach (var assembly in assemblies)
            {
                if (!CheckAssembly(reader, assembly))
                {
                    return(false);
                }
            }

            var tokens = new int[assemblies.Length];

            resourceManagerTokensOffset = reader.BaseStream.Position;
            for (int i = 0; i < tokens.Length; i++)
            {
                var token = reader.ReadInt32();
                if (!(token == 0 || ((token >> 24) == 0x06 && (token & 0x00FFFFFF) != 0)))
                {
                    return(false);
                }
                tokens[i] = token;
            }

            resourceManagerTokenCacheImpl.SetTokens(assemblies, tokens);

            return(true);
        }
Exemple #2
0
        public void UpdateResourceManagerTokens(long resourceManagerTokensOffset, ResourceManagerTokenCacheImpl resourceManagerTokenCacheImpl)
        {
            if (resourceManagerTokensOffset < 0)
            {
                return;
            }
            stream.Position = resourceManagerTokensOffset;
            var writer = new BinaryWriter(stream);
            var tokens = resourceManagerTokenCacheImpl.GetTokens(assemblies);

            if (tokens.Length != assemblies.Length)
            {
                throw new InvalidOperationException();
            }
            foreach (var token in tokens)
            {
                writer.Write(token);
            }
        }
Exemple #3
0
        public App(bool readSettings, Stopwatch startupStopwatch)
        {
            // PERF: Init MEF on a BG thread. Results in slightly faster startup, eg. InitializeComponent() becomes a 'free' call on this UI thread
            initializeMEFTask     = Task.Run(() => InitializeMEF(readSettings, useCache: readSettings));
            this.startupStopwatch = startupStopwatch;

            resourceManagerTokenCacheImpl = new ResourceManagerTokenCacheImpl();
            resourceManagerTokenCacheImpl.TokensUpdated += ResourceManagerTokenCacheImpl_TokensUpdated;
            ResourceHelper.SetResourceManagerTokenCache(resourceManagerTokenCacheImpl);
            args = new AppCommandLineArgs();
            AppDirectories.SetSettingsFilename(args.SettingsFilename);

            AddAppContextFixes();
            InstallExceptionHandlers();
            InitializeComponent();
            UIFixes();

            Exit += App_Exit;
        }