Beispiel #1
0
        private void BrowseAssembly(object sender, RoutedEventArgs e)
        {
            var dialog = new OpenFileDialog {
                Filter = "Assembly Files(*.exe, *.dll)|*.exe;*.dll"
            };

            if (dialog.ShowDialog() == false)
            {
                Definition   = null;
                DialogResult = false;
                return;
            }

            Definition = AssemblyDefinition.ReadAssembly(dialog.File.OpenRead());
            if (Definition == null)
            {
                Debugger.Break();
            }

            if (Definition.FullName == _reference.FullName)
            {
                string assemblyPath = Definition.IsSilverlight()
          ? StorageService.CacheSilverlightAssembly(dialog.File.Name, dialog.File.OpenRead())
          : StorageService.CacheNetAssembly(dialog.File.Name, dialog.File.OpenRead());

                var assemblyStream = new AssemblyFileStream(dialog.File);
                ApplicationModel.Current.AssemblyCache.LoadAssembly(assemblyStream, Definition);

                DialogResult = true;
            }
        }
Beispiel #2
0
        private void OnAssemblyDownloaded(Stream data)
        {
            RemoteCheckProgress.IsIndeterminate = false;

            if (data == null || data.Length == 0)
            {
                return;
            }

            var definition = AssemblyDefinition.ReadAssembly(data, new ReaderParameters(ReadingMode.Immediate));

            if (definition == null || !definition.FullName.Equals(_reference.FullName, StringComparison.OrdinalIgnoreCase))
            {
                RemoteCheckLabel.Text    = "Failed to download assembly.";
                BrowseButton.IsEnabled   = true;
                DownloadButton.IsEnabled = true;
                return;
            }

            string fileName = definition.Name.Name + ".dll";

            // TODO: take into account partial trust in-browser mode

            string assemblyPath = Definition.IsSilverlight()
        ? StorageService.CacheSilverlightAssembly(fileName, data)
        : StorageService.CacheNetAssembly(fileName, data);

            var assemblyStream = new AssemblyMemoryStream(fileName, data);

            ApplicationModel.Current.AssemblyCache.LoadAssembly(assemblyStream, definition);

            Definition   = definition;
            DialogResult = true;
        }
Beispiel #3
0
        private void OnLoadAssemblyClick(object sender, RoutedEventArgs e)
        {
            var dlg = new OpenFileDialog();

            if (dlg.ShowDialog() == true)
            {
                Dispatcher.BeginInvoke(() =>
                {
                    try
                    {
                        var definition = AssemblyDefinition.ReadAssembly(dlg.File.OpenRead());
                        if (definition.IsSilverlight())
                        {
                            StorageService.CacheSilverlightAssembly(dlg.File.Name, dlg.File.OpenRead());
                        }
                        else
                        {
                            StorageService.CacheNetAssembly(dlg.File.Name, dlg.File.OpenRead());
                        }

                        LoadOrReplaceAssembly(definition);
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex.Message);
                    }
                });
            }
        }
Beispiel #4
0
        private void DownloadPendingAssemblies()
        {
            if (_pendingDownloads.Count == 0)
            {
                return;
            }

            _busyContext.IsBusy = true;

            ThreadPool.QueueUserWorkItem(o =>
            {
                while (_pendingDownloads.Count > 0)
                {
                    var fileInfo = _pendingDownloads.Dequeue();

                    Dispatcher.BeginInvoke(() => { _busyContext.ItemLabel = fileInfo.Name; });

                    try
                    {
                        string extension = Path.GetExtension(fileInfo.Name);

                        if (KnownFormats.Zip.Contains(extension))
                        {
                            StorageService.AddFileToCache(fileInfo);
                            Dispatcher.BeginInvoke(() => LoadZiPackage(fileInfo));
                        }
                        else
                        {
                            var definition = AssemblyDefinition.ReadAssembly(fileInfo.OpenRead());

                            string assemblyPath = definition.IsSilverlight()
                ? StorageService.CacheSilverlightAssembly(fileInfo.Name, fileInfo.OpenRead())
                : StorageService.CacheNetAssembly(fileInfo.Name, fileInfo.OpenRead());

                            Dispatcher.BeginInvoke(() =>
                            {
                                var assemblyStream = new AssemblyFileStream(fileInfo);
                                ApplicationModel.Current.AssemblyCache.LoadAssembly(assemblyStream, definition, false);
                                LoadOrReplaceAssembly(definition, assemblyStream);
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex.Message);
                        Dispatcher.BeginInvoke(() => new ErrorWindow(ex).Show());
                    }
                }

                Dispatcher.BeginInvoke(() => _busyContext.IsBusy = false);
            });
        }
Beispiel #5
0
        private void DownloadPendingAssemblies()
        {
            if (_pendingDownloads.Count == 0)
            {
                return;
            }

            _busyContext.IsBusy = true;

            ThreadPool.QueueUserWorkItem(o =>
            {
                while (_pendingDownloads.Count > 0)
                {
                    var fileInfo = _pendingDownloads.Dequeue();

                    Dispatcher.BeginInvoke(() => { _busyContext.ItemLabel = fileInfo.Name; });

                    try
                    {
                        var assembly = AssemblyDefinition.ReadAssembly(fileInfo.OpenRead());
                        if (assembly.IsSilverlight())
                        {
                            StorageService.CacheSilverlightAssembly(fileInfo.Name, fileInfo.OpenRead());
                        }
                        else
                        {
                            StorageService.CacheNetAssembly(fileInfo.Name, fileInfo.OpenRead());
                        }
                        Dispatcher.BeginInvoke(() => LoadOrReplaceAssembly(assembly));
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex.Message);
                        Dispatcher.BeginInvoke(() => new ErrorWindow(ex).Show());
                    }
                }

                Dispatcher.BeginInvoke(() => _busyContext.IsBusy = false);
            });
        }