it was needed, but with some checks

This commit is contained in:
z__
2022-02-09 20:25:09 +07:00
parent 67f25ab20b
commit 0632f68aaf

View File

@@ -92,29 +92,49 @@ namespace Torch.Server
private static void CopyNative(string binPath) private static void CopyNative(string binPath)
{ {
var apiSource = Path.Combine(binPath, "steam_api64.dll"); var log = LogManager.GetLogger("TorchLauncher");
var apiTarget = Path.Combine(AppContext.BaseDirectory, "steam_api64.dll");
if (!File.Exists(apiTarget)) var workingDir = new DirectoryInfo(Directory.GetCurrentDirectory());
if (workingDir.Attributes.HasFlag(FileAttributes.ReadOnly))
{ {
File.Copy(apiSource, apiTarget); log.Warn("Game directory is readonly. You should copy steam_api64.dll, Havok.dll from bin manually");
} return;
else if (File.GetLastWriteTime(apiTarget) < File.GetLastWriteTime(binPath))
{
File.Delete(apiTarget);
File.Copy(apiSource, apiTarget);
} }
var havokSource = Path.Combine(binPath, "Havok.dll"); try
var havokTarget = Path.Combine(AppContext.BaseDirectory, "Havok.dll"); {
var apiSource = Path.Combine(binPath, "steam_api64.dll");
var apiTarget = Path.Combine(workingDir.FullName, "steam_api64.dll");
if (!File.Exists(apiTarget))
{
File.Copy(apiSource, apiTarget);
}
else if (File.GetLastWriteTime(apiTarget) < File.GetLastWriteTime(binPath))
{
File.Delete(apiTarget);
File.Copy(apiSource, apiTarget);
}
if (!File.Exists(havokTarget)) var havokSource = Path.Combine(binPath, "Havok.dll");
{ var havokTarget = Path.Combine(workingDir.FullName, "Havok.dll");
File.Copy(havokSource, havokTarget);
if (!File.Exists(havokTarget))
{
File.Copy(havokSource, havokTarget);
}
else if (File.GetLastWriteTime(havokTarget) < File.GetLastWriteTime(havokSource))
{
File.Delete(havokTarget);
File.Copy(havokSource, havokTarget);
}
} }
else if (File.GetLastWriteTime(havokTarget) < File.GetLastWriteTime(havokSource)) catch (UnauthorizedAccessException)
{ {
File.Delete(havokTarget); // file is being used by another process, probably previous torch has not been closed yet
File.Copy(havokSource, havokTarget); }
catch (Exception e)
{
log.Error(e);
} }
} }
} }