Start Sascha C# Updater UpdateInfo
Die UpdateInfo Klasse Drucken
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;
  5. using System.Reflection;
  6.  
  7. namespace S_MzH.Update
  8. {
  9. /// <summary>
  10. /// Diese Klasse ist dafür gedacht einige Informationen für das Update zurückzugeben.
  11. /// </summary>
  12. class UpdateInfo : IComparable
  13. {
  14. // Einige Variablen die benötigt werden
  15. private string m_sFileName = String.Empty;
  16. private string m_sLocalPath = String.Empty;
  17. private string m_sServerPath = String.Empty;
  18. private string m_sServerVersion = String.Empty;
  19. private string m_sLocalVersion = String.Empty;
  20. private DateTime m_dtServerWriteTime = DateTime.Now;
  21. private DateTime m_dtLocalWriteTime = DateTime.Now;
  22. private bool m_bUpToDate;
  23.  
  24. /// <summary>
  25. /// Die interne Methode zum Überprüfen ob es ein Update gibt
  26. /// </summary>
  27. private void CheckUpdate()
  28. {
  29. string sFileExtension = Path.GetExtension(m_sFileName).ToLower();
  30.  
  31. m_bUpToDate = true;
  32. // Die Version der Datei muss nur überprüft werden,
  33. // wenn es sich um eine .exe, .dll oder .msi Datei handelt
  34. if ((sFileExtension == ".exe") || (sFileExtension == ".dll") || (sFileExtension == ".msi"))
  35. {
  36. try
  37. {
  38. m_sServerVersion = Assembly.LoadFrom(m_sServerPath + m_sFileName).FullName;
  39. m_sServerVersion = m_sServerVersion.Split(',')[1].Trim();
  40. m_sServerVersion = m_sServerVersion.Substring(m_sServerVersion.IndexOf('=') + 1);
  41. }
  42. catch (Exception ex)
  43. {
  44. throw new ArgumentException(ex.Message);
  45. }
  46.  
  47. try
  48. {
  49. m_sLocalVersion = Assembly.LoadFrom(m_sLocalPath + m_sFileName).FullName;
  50. m_sLocalVersion = m_sLocalVersion.Split(',')[1].Trim();
  51. m_sLocalVersion = m_sLocalVersion.Substring(m_sLocalVersion.IndexOf('=') + 1);
  52. }
  53. catch
  54. {
  55. m_sLocalVersion = String.Empty;
  56. }
  57.  
  58. // Ist die Server Datei aktueller als die Lokale Datei?
  59. if (m_sLocalVersion.CompareTo(m_sServerVersion) < 0)
  60. m_bUpToDate = false;
  61. }
  62. try
  63. {
  64. m_dtServerWriteTime = File.GetLastWriteTime(m_sServerPath + m_sFileName);
  65. m_dtLocalWriteTime = File.GetLastWriteTime(m_sLocalPath + m_sFileName);
  66.  
  67. // Wurde die Server Datei zuletzt beschrieben?
  68. if ((m_dtServerWriteTime.Subtract(m_dtLocalWriteTime)).Ticks > 0)
  69. m_bUpToDate = false;
  70. }
  71. catch (Exception ex)
  72. {
  73. throw new ArgumentException(ex.Message);
  74. }
  75. }
  76.  
  77. /// <summary>
  78. /// Im Konstruktor wird die Datei hinzugefügt und überprüft od diese aktuell ist.
  79. /// </summary>
  80. /// <param name="FileName">Dateiname mit Endung</param>
  81. /// <param name="ServerPath">Der Pfad in dem sich die aktuellen Dateien befinden. Achtung: Ein \ muss am Ende stehen!</param>
  82. /// <param name="LocalPath">Der Pfad in dem sich die zu überprüfenden Dateien befinden. Achtung: Ein \ muss am Ende stehen!</param>
  83. public UpdateInfo(string FileName, string ServerPath, string LocalPath)
  84. {
  85. // Speichern Datei-Eigenschaften
  86. m_sFileName = FileName;
  87. m_sServerPath = ServerPath;
  88. m_sLocalPath = LocalPath;
  89.  
  90. // Überprüfen ob die Datei UpToDate ist
  91. CheckUpdate();
  92. }
  93.  
  94. /// <summary>
  95. /// Gibt den Dateinamen zurück
  96. /// </summary>
  97. public string FileName
  98. {
  99. get { return m_sFileName; }
  100. }
  101.  
  102. /// <summary>
  103. /// Gibt den Pfad zurück indem die zu überprüfende Datei liegt
  104. /// </summary>
  105. public string LocalPath
  106. {
  107. get { return m_sLocalPath; }
  108. }
  109.  
  110. /// <summary>
  111. /// Gibt den Pfad zurück in dem sich die aktuelle Dateien befinden
  112. /// </summary>
  113. public string ServerPath
  114. {
  115. get { return m_sServerPath; }
  116. }
  117.  
  118. /// <summary>
  119. /// Wenn es sich um eine .exe, .dll oder .msi Datei handelt dann wird die Version zurückgegeben.
  120. /// Sonst wird ein leerer String zurückgegeben.
  121. /// </summary>
  122. public string ServerVersion
  123. {
  124. get { return m_sServerVersion; }
  125. }
  126.  
  127. /// <summary>
  128. /// Wenn es sich um eine .exe, .dll oder .msi Datei handelt dann wird die Version zurückgegeben.
  129. /// Sonst wird ein leerer String zurückgegeben.
  130. /// </summary>
  131. public string LocalVersion
  132. {
  133. get { return m_sLocalVersion; }
  134. }
  135.  
  136. /// <summary>
  137. /// Wenn die Datei aktuell ist, dann gibt es true zurück
  138. /// </summary>
  139. public bool UpToDate
  140. {
  141. get { return m_bUpToDate; }
  142. }
  143.  
  144. /// <summary>
  145. /// Interne Vergleich der UpdateInfo Elementen
  146. /// Es wird nach dem Dateinamen sortiert.
  147. /// </summary>
  148. /// <param name="ui"></param>
  149. /// <returns></returns>
  150. private int InternalCompare(UpdateInfo ui)
  151. {
  152. string sFirstFileName = m_sFileName;
  153. string sSecondFileName = ui.FileName;
  154.  
  155. return sFirstFileName.CompareTo(sSecondFileName);
  156. }
  157.  
  158. /// <summary>
  159. /// Liefert den Dateinamen und den Status zurück
  160. /// </summary>
  161. /// <returns></returns>
  162. public override string ToString()
  163. {
  164. string ret = m_sFileName + " : UpToDate=" + m_bUpToDate.ToString();
  165. return ret;
  166. }
  167.  
  168. /// <summary>
  169. /// Es wird der Dateiname verglichen.
  170. /// </summary>
  171. /// <param name="o"></param>
  172. /// <returns></returns>
  173. public int CompareTo(object o)
  174. {
  175. UpdateInfo ui = (o as UpdateInfo);
  176. if (ui == null)
  177. throw new ArgumentException ("Das übergebene Objekt muss vom Typ \"UpdateInfo\" sein!");
  178. else
  179. return InternalCompare(ui);
  180. }
  181. }
  182. }
  183.