//@Brief Obtiene una porción de la actualización //@Param[in] nSequence Número de la secuencia //@Return dc_UpdateWProgram Estructura con los datos de la actualización public dc_UpdateRemoteManager GetFileUpdateRemoteManager(int nSequence) { dc_UpdateRemoteManager updateRemoteManager = new dc_UpdateRemoteManager(); updateRemoteManager.sequence = -1; updateRemoteManager.final = false; try { m_mutexHostControllerEndpoints.WaitOne(); foreach (EndpointAddress ep in m_hostControllerEndpoints) { BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None); JBCHostControllerServiceClient serviceClient = new JBCHostControllerServiceClient(binding, ep); serviceClient.Open(); updateRemoteManager = serviceClient.GetFileUpdateRemoteManager(nSequence); serviceClient.Close(); } } catch (Exception ex) { LoggerModule.logger.Error(System.Reflection.MethodInfo.GetCurrentMethod().Name + ". Error: " + ex.Message); } finally { m_mutexHostControllerEndpoints.ReleaseMutex(); } return(updateRemoteManager); }
private void ProcessUpdate() { bool bOk = false; try { bool bContinue = false; int nSequence = 1; //Carpeta temporal donde guardar la descarga string tempFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles), "JBC\\Manager", System.Convert.ToString(My.Settings.Default.TempUpdateFolder)); //Borra la carpeta temporal if ((new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.DirectoryExists(tempFolder)) { (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.DeleteDirectory(tempFolder, Microsoft.VisualBasic.FileIO.DeleteDirectoryOption.DeleteAllContents); } //Crear carpeta temporal Directory.CreateDirectory(tempFolder); //Download the update do { //Actualizar progress bar SetProgressBarValue(nSequence); int nTries = 3; bOk = false; dc_UpdateRemoteManager updateRemoteManager = new dc_UpdateRemoteManager(); while (nTries > 0 && !bOk) { updateRemoteManager = m_comHostController.GetFileUpdateRemoteManager(nSequence); bOk = updateRemoteManager.sequence == nSequence; bContinue = !updateRemoteManager.final; nTries--; } if (!bOk) { break; } nSequence++; (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.WriteAllBytes(Path.Combine(tempFolder, System.Convert.ToString(My.Settings.Default.AppCompressFileName)), updateRemoteManager.bytes, true); } while (bContinue); if (bOk) { bOk = UncompressUpdateFile(); //Descomprime la actualización if (bOk) { Interaction.Shell(Directory.GetFiles(tempFolder, "*.exe").First()); //Auto cierra la aplicación ProjectData.EndApp(); } } } catch (Exception) { bOk = false; } if (!bOk) { ErrorUpdate(); } }