From f7a52c98ff9bcb467dbeb72b8308a7fcb8eea796 Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Sun, 25 Jun 2023 19:13:58 -0400 Subject: [PATCH] Fix BYOND installer creating BYOND directory in Windows service installation --- .../Components/Byond/ByondManager.cs | 51 +++++++++++-------- .../Components/Byond/WindowsByondInstaller.cs | 6 ++- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Byond/ByondManager.cs b/src/Tgstation.Server.Host/Components/Byond/ByondManager.cs index da057c1ead..664ffb4a02 100644 --- a/src/Tgstation.Server.Host/Components/Byond/ByondManager.cs +++ b/src/Tgstation.Server.Host/Components/Byond/ByondManager.cs @@ -302,26 +302,28 @@ namespace Tgstation.Server.Host.Components.Byond var activeVersionBytesTask = GetActiveVersion(); - using (await SemaphoreSlimContext.Lock(UserFilesSemaphore, cancellationToken)) - { - // Create local cfg directory in case it doesn't exist - var localCfgDirectory = ioManager.ConcatPath( - byondInstaller.PathToUserByondFolder, - CfgDirectoryName); - await ioManager.CreateDirectory( - localCfgDirectory, - cancellationToken); - - // Delete trusted.txt so it doesn't grow too large - var trustedFilePath = - ioManager.ConcatPath( + var byondDir = byondInstaller.PathToUserByondFolder; + if (byondDir != null) + using (await SemaphoreSlimContext.Lock(UserFilesSemaphore, cancellationToken)) + { + // Create local cfg directory in case it doesn't exist + var localCfgDirectory = ioManager.ConcatPath( + byondDir, + CfgDirectoryName); + await ioManager.CreateDirectory( localCfgDirectory, - TrustedDmbFileName); - logger.LogTrace("Deleting trusted .dmbs file {trustedFilePath}", trustedFilePath); - await ioManager.DeleteFile( - trustedFilePath, - cancellationToken); - } + cancellationToken); + + // Delete trusted.txt so it doesn't grow too large + var trustedFilePath = + ioManager.ConcatPath( + localCfgDirectory, + TrustedDmbFileName); + logger.LogTrace("Deleting trusted .dmbs file {trustedFilePath}", trustedFilePath); + await ioManager.DeleteFile( + trustedFilePath, + cancellationToken); + } await ioManager.CreateDirectory(DefaultIOManager.CurrentDirectory, cancellationToken); var directories = await ioManager.GetDirectories(DefaultIOManager.CurrentDirectory, cancellationToken); @@ -616,8 +618,15 @@ namespace Tgstation.Server.Host.Components.Byond /// A representing the running operation. async Task TrustDmbPath(string fullDmbPath, CancellationToken cancellationToken) { + var byondDir = byondInstaller.PathToUserByondFolder; + if (String.IsNullOrWhiteSpace(byondDir)) + { + logger.LogTrace("No relevant user BYOND directory to install a \"{fileName}\" in", TrustedDmbFileName); + return; + } + var trustedFilePath = ioManager.ConcatPath( - byondInstaller.PathToUserByondFolder, + byondDir, CfgDirectoryName, TrustedDmbFileName); @@ -633,9 +642,7 @@ namespace Tgstation.Server.Host.Components.Byond trustedFileText = $"{trustedFileText.Trim()}{Environment.NewLine}"; } else - { trustedFileText = String.Empty; - } if (trustedFileText.Contains(fullDmbPath, StringComparison.Ordinal)) return; diff --git a/src/Tgstation.Server.Host/Components/Byond/WindowsByondInstaller.cs b/src/Tgstation.Server.Host/Components/Byond/WindowsByondInstaller.cs index 3bd1e64db1..91f9412a34 100644 --- a/src/Tgstation.Server.Host/Components/Byond/WindowsByondInstaller.cs +++ b/src/Tgstation.Server.Host/Components/Byond/WindowsByondInstaller.cs @@ -94,7 +94,11 @@ namespace Tgstation.Server.Host.Components.Byond this.processExecutor = processExecutor ?? throw new ArgumentNullException(nameof(processExecutor)); generalConfiguration = generalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(generalConfigurationOptions)); - PathToUserByondFolder = IOManager.ResolvePath(IOManager.ConcatPath(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "BYOND")); + var documentsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); + if (String.IsNullOrWhiteSpace(documentsDirectory)) + PathToUserByondFolder = null; // happens with the service account + else + PathToUserByondFolder = IOManager.ResolvePath(IOManager.ConcatPath(documentsDirectory, "BYOND")); semaphore = new SemaphoreSlim(1); installedDirectX = false;