diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..8c230679 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "nuget" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs index 97d78cc2..6c7d14ac 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs @@ -306,7 +306,7 @@ internal sealed class GameService : IGameService game.Start(); if (isElevated && launchOptions.MultipleInstances) { - await ProcessInterop.DisableProtectionAsync(gamePath).ConfigureAwait(false); + await ProcessInterop.DisableProtectionAsync(game, gamePath).ConfigureAwait(false); } if (isElevated && launchOptions.UnlockFps) diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/ProcessInterop.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/ProcessInterop.cs index 8c284af0..ee12a971 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/ProcessInterop.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/ProcessInterop.cs @@ -6,6 +6,7 @@ using Snap.Hutao.Core.IO; using Snap.Hutao.Service.Game.Unlocker; using System.Diagnostics; using System.IO; +using System.Runtime.InteropServices; namespace Snap.Hutao.Service.Game; @@ -65,22 +66,26 @@ internal static class ProcessInterop /// /// 尝试禁用mhypbase /// + /// 游戏进程 /// 游戏路径 /// 是否禁用成功 - public static async Task DisableProtectionAsync(string gamePath) + public static async Task DisableProtectionAsync(Process game, string gamePath) { string? gameFolder = Path.GetDirectoryName(gamePath); if (!string.IsNullOrEmpty(gameFolder)) { - string mhypbaseDll = Path.Combine(gameFolder, "mhypbase.dll"); - string mhypbaseDllBackup = Path.Combine(gameFolder, "mhypbase.dll.backup"); - - File.Move(mhypbaseDll, mhypbaseDllBackup, true); - await Task.Delay(TimeSpan.FromSeconds(12)).ConfigureAwait(false); - File.Move(mhypbaseDllBackup, mhypbaseDll, true); + string pbasePath = Path.Combine(gameFolder, "mhypbase.dll"); + SafeHandle handle = File.OpenHandle(pbasePath, share: FileShare.None); + while (true) { + if (game.MainWindowHandle != nint.Zero) { + handle.Close(); + break; + } + await Task.Delay(100).ConfigureAwait(false); + } return true; } return false; } -} \ No newline at end of file +}