private void SetupDisablerButtonText() { if (SelectedTarget != null) { var d3d9Path = Path.Combine(MEDirectories.ExecutableDirectory(SelectedTarget), @"d3d9.dll"); if (File.Exists(d3d9Path)) { // See if it ME3Tweaks disabler or some other tool var fi = new FileInspector(d3d9Path); foreach (var sig in fi.GetSignatures()) { foreach (var signChain in sig.AdditionalCertificates) { try { var outStr = signChain.Subject.Substring(3); //remove CN= outStr = outStr.Substring(0, outStr.IndexOf(',')); if (outStr == @"Michael Perez") //My signing cert name { D3D9Status = M3L.GetString(M3L.string_overlayDisablerInstalled); DisablerButtonText = M3L.GetString(M3L.string_uninstallDisabler); DisablerButtonEnabled = true; return; } } catch { } } } D3D9Status = M3L.GetString(M3L.string_otherD3d9dllInstalledOverlayDisabled); DisablerButtonText = M3L.GetString(M3L.string_cannotUninstallOtherD3d9File); DisablerButtonEnabled = false; return; } DisablerButtonEnabled = true; D3D9Status = M3L.GetString(M3L.string_overlayDisablerNotInstalled); DisablerButtonText = M3L.GetString(M3L.string_installDisabler); } else { DisablerButtonEnabled = false; DisablerButtonText = M3L.GetString(M3L.string_installDisabler); if (Targets.Any()) { D3D9Status = M3L.GetString(M3L.string_noTargetSelected); } else { D3D9Status = M3L.GetString(M3L.string_noOriginBasedGameTargets); } } }
/// <summary> /// Populates list of 'extra' items for the game. This includes things like dlls, and for ME1, config files /// </summary> public void PopulateExtras() { var exeDir = MEDirectories.ExecutableDirectory(this); var dlls = Directory.GetFiles(exeDir, @"*.dll").Select(x => Path.GetFileName(x)); var expectedDlls = MEDirectories.VanillaDlls(this.Game); var extraDlls = dlls.Except(expectedDlls, StringComparer.InvariantCultureIgnoreCase); void notifyExtraFileDeleted(InstalledExtraFile ief) { ExtraFiles.Remove(ief); } ExtraFiles.ReplaceAll(extraDlls.Select(x => new InstalledExtraFile(Path.Combine(exeDir, x), InstalledExtraFile.EFileType.DLL, Game, notifyExtraFileDeleted))); }
private void ToggleDisabler() { NamedBackgroundWorker nbw = new NamedBackgroundWorker(@"OIGDisablerThread"); nbw.DoWork += async(a, b) => { if (!Utilities.IsGameRunning(Game)) { var d3d9Path = Path.Combine(MEDirectories.ExecutableDirectory(SelectedTarget), @"d3d9.dll"); if (!File.Exists(d3d9Path)) { if (File.Exists(Utilities.GetOriginOverlayDisableFile())) { Log.Information(@"Installing origin overlay disabler from cache to " + d3d9Path); try { File.Copy(Utilities.GetOriginOverlayDisableFile(), d3d9Path); } catch (Exception e) { Log.Error($@"Error installing d3d9.dll: {e.Message}"); } } else { var client = new GitHubClient(new ProductHeaderValue(@"ME3TweaksModManager")); try { var releases = await client.Repository.Release.GetAll(@"ME3Tweaks", @"d3d9-blank-proxy"); if (releases.Count > 0) { Log.Information(@"Parsing release information from github"); //The release we want to check is always the latest with assets that is not a pre-release var latestRel = releases.FirstOrDefault(x => !x.Prerelease && x.Assets.Count > 0); if (latestRel != null) { var downloadUrl = latestRel.Assets[0].BrowserDownloadUrl; var downloadedZipAsset = OnlineContent.DownloadToMemory(downloadUrl); using var zf = new ZipArchive(downloadedZipAsset.result); var d3d9 = zf.Entries.First(x => x.FullName == @"d3d9.dll"); if (d3d9 != null) { await using var data = d3d9.Open(); var memStream = new MemoryStream(); data.CopyTo(memStream); try { Log.Information(@"Installing origin overlay disabler from memory to " + d3d9Path); memStream.WriteToFile(d3d9Path); //install Log.Information(@"Caching d3d9 disabler"); memStream.WriteToFile(Utilities.GetOriginOverlayDisableFile()); } catch (Exception e) { Log.Error(@"Cannot install/cache disabler: " + e.Message); } } } } } catch (Exception e) { Log.Error(@"Error checking for tool update: " + e); } } } else { Log.Information(@"Deleting " + d3d9Path); try { File.Delete(d3d9Path); } catch (Exception e) { Log.Error($@"Error deleting d3d9.dll: {e.Message}"); } } } }; nbw.RunWorkerCompleted += (await, b) => { SetupDisablerButtonText(); }; nbw.RunWorkerAsync(); }