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
+}