diff --git a/Plain Craft Launcher 2/Application.xaml.vb b/Plain Craft Launcher 2/Application.xaml.vb index eb34ceb..427ac33 100644 --- a/Plain Craft Launcher 2/Application.xaml.vb +++ b/Plain Craft Launcher 2/Application.xaml.vb @@ -103,6 +103,7 @@ Public Class Application Log($"[Start] 识别码:{UniqueAddress}{If(ThemeCheckOne(9), ",已解锁反馈主题", "")}") Log($"[Start] 程序路径:{PathWithName}") Log($"[Start] 系统编码:{Encoding.Default} ({Encoding.Default.CodePage}, GBK={IsGBKEncoding})") + Log($"[Start] 管理员权限:{IsAdmin()}") '检测压缩包运行 If Path.Contains(IO.Path.GetTempPath()) OrElse Path.Contains("AppData\Local\Temp\") Then MyMsgBox("PCL 正在临时文件夹运行,设置、游戏存档等很可能无法保存,且部分功能会无法使用或出错。" & vbCrLf & "请将 PCL 从压缩文件中解压,或是更换文件夹后再继续使用!", "环境警告", "我知道了", IsWarn:=True) diff --git a/Plain Craft Launcher 2/FormMain.xaml.vb b/Plain Craft Launcher 2/FormMain.xaml.vb index ae44e45..265004e 100644 --- a/Plain Craft Launcher 2/FormMain.xaml.vb +++ b/Plain Craft Launcher 2/FormMain.xaml.vb @@ -10,6 +10,9 @@ Public Class FormMain Dim FeatureList As New List(Of KeyValuePair(Of Integer, String)) '统计更新日志条目 #If BETA Then + If LastVersion < 332 Then 'Release 2.8.3 + If LastVersion = 330 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复部分玩家无法启动 MC 的 Bug")) + End If If LastVersion < 330 Then 'Release 2.8.2 FeatureList.Add(New KeyValuePair(Of Integer, String)(5, "NeoForge 兼容与自动安装")) FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "支持编译、运行 PCL 开源代码")) @@ -121,6 +124,9 @@ Public Class FormMain '3:BUG+ IMP* FEAT- '2:BUG* IMP- '1:BUG- + If LastVersion < 331 Then 'Snapshot 2.8.3 + If LastVersion = 329 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复部分玩家无法启动 MC 的 Bug")) + End If If LastVersion < 329 Then 'Snapshot 2.8.2 If LastVersion >= 327 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复无法安装 Beta 版 NeoForge 的整合包的 Bug")) diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.vb b/Plain Craft Launcher 2/Modules/Base/ModBase.vb index 30cb7bd..e7897f4 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModBase.vb +++ b/Plain Craft Launcher 2/Modules/Base/ModBase.vb @@ -11,12 +11,12 @@ Public Module ModBase #Region "声明" '下列版本信息由更新器自动修改 - Public Const VersionBaseName As String = "2.8.2" '不含分支前缀的显示用版本名 - Public Const VersionStandardCode As String = "2.8.2." & VersionBranchCode '标准格式的四段式版本号 + Public Const VersionBaseName As String = "2.8.3" '不含分支前缀的显示用版本名 + Public Const VersionStandardCode As String = "2.8.3." & VersionBranchCode '标准格式的四段式版本号 #If BETA Then - Public Const VersionCode As Integer = 330 'Release + Public Const VersionCode As Integer = 332 'Release #Else - Public Const VersionCode As Integer = 329 'Snapshot + Public Const VersionCode As Integer = 331 'Snapshot #End If '自动生成的版本信息 Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName @@ -1016,7 +1016,7 @@ Public Module ModBase ''' Public Function CheckPermission(Path As String) As Boolean Try - If Path = "" Then Return False + If String.IsNullOrEmpty(Path) Then Return False If Not Path.EndsWithF("\") Then Path += "\" If Path.EndsWithF(":\System Volume Information\") OrElse Path.EndsWithF(":\$RECYCLE.BIN\") Then Return False If Not Directory.Exists(Path) Then Return False diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb index 163f498..ec7b09d 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb @@ -1276,27 +1276,40 @@ SystemBrowser: ''' 释放 Java Wrapper 并返回完整文件路径。 ''' Public Function ExtractJavaWrapper() As String - Dim WrapperPath As String = GetJavaWrapperDir() & "\JavaWrapper.jar" + Dim BaseDir As String = GetJavaWrapperDir() + Dim WrapperPath As String = BaseDir & "\JavaWrapper.jar" + Log("[Java] 选定的 Java Wrapper 路径:" & WrapperPath) SyncLock ExtractJavaWrapperLock '避免 OptiFine 和 Forge 安装时同时释放 Java Wrapper 导致冲突 - If Not WriteFile(WrapperPath, GetResources("JavaWrapper")) Then - Throw New FileNotFoundException("释放 Java Wrapper 失败") + Dim IsWrapperWritten As Boolean = WriteFile(WrapperPath, GetResources("JavaWrapper")) + If Not IsWrapperWritten AndAlso File.Exists(WrapperPath) Then + '以下为 #4243 的修复,因为未知原因 Java Wrapper 可能变为只读文件 + Log("[Java] Java Wrapper 文件释放失败,但文件已存在,将在删除后尝试重新生成", LogLevel.Debug) + Try + File.Delete(WrapperPath) + IsWrapperWritten = WriteFile(WrapperPath, GetResources("JavaWrapper")) + Catch ex As Exception + Log(ex, "Java Wrapper 文件重新释放失败,将尝试更换文件名重新生成") + WrapperPath = BaseDir & "\JavaWrapper2.jar" + IsWrapperWritten = WriteFile(WrapperPath, GetResources("JavaWrapper")) + End Try End If + If Not IsWrapperWritten Then Throw New FileNotFoundException("释放 Java Wrapper 失败,请查看 PCL 日志查找详细信息") End SyncLock - Log("[Java] 已释放 Java Wrapper:" & WrapperPath) Return WrapperPath End Function Private ExtractJavaWrapperLock As New Object + ''' ''' 获取 Java Wrapper 所在的文件夹,不以 \ 结尾。 ''' Public Function GetJavaWrapperDir() As String - If PathAppdata.IsASCII() Then + If (Path & "PCL").IsASCII() Then + Return Path & "PCL" + ElseIf PathAppdata.IsASCII() Then Return PathAppdata.TrimEnd("\") ElseIf PathTemp.IsASCII() Then - Log("[Java] Wrapper:AppData 路径中包含非 ASCII 字符,换用 Temp 目录") Return PathTemp.TrimEnd("\") Else - Log("[Java] Wrapper:AppData 路径与 Temp 路径中均包含非 ASCII 字符,换用 ProgramData 目录") Return OsDrive & "ProgramData\PCL" End If End Function diff --git a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb index 5a7874b..086cbf9 100644 --- a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb +++ b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb @@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices ' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 ' 方法是按如下所示使用“*” - - + + diff --git a/最新正式版.zip b/最新正式版.zip index 4ee2c7d..f4ca635 100644 Binary files a/最新正式版.zip and b/最新正式版.zip differ