From 967f6f76f0a2aef0ae89f1078d88bf0babc5434c Mon Sep 17 00:00:00 2001
From: Lightczx <1686188646@qq.com>
Date: Fri, 29 Dec 2023 11:11:53 +0800
Subject: [PATCH] refuse convert for game in Program Files folder
---
src/Snap.Hutao/Snap.Hutao/Core/CommandLineBuilder.cs | 6 +++---
.../Core/ExceptionService/HutaoException.cs | 6 ------
.../Core/ExceptionService/HutaoExceptionKind.cs | 9 +++++++++
.../Service/Game/Package/GamePackageService.cs | 7 +++++++
.../Service/Game/Process/GameProcessService.cs | 12 ++++++------
5 files changed, 25 insertions(+), 15 deletions(-)
create mode 100644 src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/HutaoExceptionKind.cs
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/CommandLineBuilder.cs b/src/Snap.Hutao/Snap.Hutao/Core/CommandLineBuilder.cs
index ca8af27f..43974976 100644
--- a/src/Snap.Hutao/Snap.Hutao/Core/CommandLineBuilder.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Core/CommandLineBuilder.cs
@@ -18,11 +18,11 @@ internal sealed class CommandLineBuilder
///
/// 当符合条件时添加参数
///
- /// 参数名称
/// 条件
+ /// 参数名称
/// 值
/// 命令行建造器
- public CommandLineBuilder AppendIf(string name, bool condition, object? value = null)
+ public CommandLineBuilder AppendIf(bool condition, string name, object? value = null)
{
return condition ? Append(name, value) : this;
}
@@ -35,7 +35,7 @@ internal sealed class CommandLineBuilder
/// 命令行建造器
public CommandLineBuilder AppendIfNotNull(string name, object? value = null)
{
- return AppendIf(name, value is not null, value);
+ return AppendIf(value is not null, name, value);
}
///
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/HutaoException.cs b/src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/HutaoException.cs
index 90c02aef..543b0098 100644
--- a/src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/HutaoException.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/HutaoException.cs
@@ -17,10 +17,4 @@ internal sealed class HutaoException : Exception
}
public HutaoExceptionKind Kind { get; private set; }
-}
-
-internal enum HutaoExceptionKind
-{
- None,
-
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/HutaoExceptionKind.cs b/src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/HutaoExceptionKind.cs
new file mode 100644
index 00000000..6cf43a30
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Core/ExceptionService/HutaoExceptionKind.cs
@@ -0,0 +1,9 @@
+// Copyright (c) DGP Studio. All rights reserved.
+// Licensed under the MIT license.
+
+namespace Snap.Hutao.Core.ExceptionService;
+
+internal enum HutaoExceptionKind
+{
+ None,
+}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/GamePackageService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/GamePackageService.cs
index c8aeb30b..f828323f 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/GamePackageService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/GamePackageService.cs
@@ -66,6 +66,13 @@ internal sealed partial class GamePackageService : IGamePackageService
private static bool CheckDirectoryPermissions(string folder)
{
+ // Program Files has special permissions limitation.
+ string programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
+ if (folder.StartsWith(programFiles, StringComparison.OrdinalIgnoreCase))
+ {
+ return false;
+ }
+
try
{
string tempFilePath = Path.Combine(folder, $"{Guid.NewGuid():N}.tmp");
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Process/GameProcessService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Process/GameProcessService.cs
index 5f960dbb..37bdadb3 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Process/GameProcessService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Process/GameProcessService.cs
@@ -111,13 +111,13 @@ internal sealed partial class GameProcessService : IGameProcessService
// https://docs.unity.cn/cn/current/Manual/PlayerCommandLineArguments.html
// https://docs.unity3d.com/2017.4/Documentation/Manual/CommandLineArguments.html
commandLine = new CommandLineBuilder()
- .AppendIf("-popupwindow", launchOptions.IsBorderless)
- .AppendIf("-window-mode", launchOptions.IsExclusive, "exclusive")
+ .AppendIf(launchOptions.IsBorderless, "-popupwindow")
+ .AppendIf(launchOptions.IsExclusive, "-window-mode", "exclusive")
.Append("-screen-fullscreen", launchOptions.IsFullScreen ? 1 : 0)
- .AppendIf("-screen-width", launchOptions.IsScreenWidthEnabled, launchOptions.ScreenWidth)
- .AppendIf("-screen-height", launchOptions.IsScreenHeightEnabled, launchOptions.ScreenHeight)
- .AppendIf("-monitor", launchOptions.IsMonitorEnabled, launchOptions.Monitor.Value)
- .AppendIf("-platform_type CLOUD_THIRD_PARTY_MOBILE", launchOptions.IsUseCloudThirdPartyMobile)
+ .AppendIf(launchOptions.IsScreenWidthEnabled, "-screen-width", launchOptions.ScreenWidth)
+ .AppendIf(launchOptions.IsScreenHeightEnabled, "-screen-height", launchOptions.ScreenHeight)
+ .AppendIf(launchOptions.IsMonitorEnabled, "-monitor", launchOptions.Monitor.Value)
+ .AppendIf(launchOptions.IsUseCloudThirdPartyMobile, "-platform_type CLOUD_THIRD_PARTY_MOBILE")
.ToString();
}