root / trunk / NetSparkle / NetSparkleConfiguration.cs @ 049333d2
History | View | Annotate | Download (8.6 kB)
1 | 46426dbd | Panagiotis Kanavos | using System; |
---|---|---|---|
2 | 46426dbd | Panagiotis Kanavos | using System.Collections.Generic; |
3 | 46426dbd | Panagiotis Kanavos | using System.Linq; |
4 | 46426dbd | Panagiotis Kanavos | using System.Text; |
5 | 46426dbd | Panagiotis Kanavos | using Microsoft.Win32; |
6 | 46426dbd | Panagiotis Kanavos | using System.Diagnostics; |
7 | 46426dbd | Panagiotis Kanavos | |
8 | 46426dbd | Panagiotis Kanavos | namespace AppLimit.NetSparkle |
9 | 46426dbd | Panagiotis Kanavos | { |
10 | 46426dbd | Panagiotis Kanavos | /// <summary> |
11 | 46426dbd | Panagiotis Kanavos | /// This class handles all registry values which are used from sparkle to handle |
12 | 46426dbd | Panagiotis Kanavos | /// update intervalls. All values are stored in HKCU\Software\Vendor\AppName which |
13 | 46426dbd | Panagiotis Kanavos | /// will be read ot from the assembly information. All values are of the REG_SZ |
14 | 46426dbd | Panagiotis Kanavos | /// type, no matter what their "logical" type is. The following options are |
15 | 46426dbd | Panagiotis Kanavos | /// available: |
16 | 46426dbd | Panagiotis Kanavos | /// |
17 | 46426dbd | Panagiotis Kanavos | /// CheckForUpdate - Boolean - Whether NetSparkle should check for updates |
18 | 46426dbd | Panagiotis Kanavos | /// LastCheckTime - time_t - Time of last check |
19 | 46426dbd | Panagiotis Kanavos | /// SkipThisVersion - String - If the user skipped an update, then the version to ignore is stored here (e.g. "1.4.3") |
20 | 46426dbd | Panagiotis Kanavos | /// DidRunOnce - Boolean - Check only one time when the app launched |
21 | 46426dbd | Panagiotis Kanavos | /// </summary> |
22 | 46426dbd | Panagiotis Kanavos | public class NetSparkleConfiguration |
23 | 46426dbd | Panagiotis Kanavos | { |
24 | 46426dbd | Panagiotis Kanavos | public String ApplicationName { get; private set; } |
25 | 46426dbd | Panagiotis Kanavos | public String InstalledVersion { get; private set; } |
26 | 46426dbd | Panagiotis Kanavos | public Boolean CheckForUpdate { get; private set; } |
27 | 46426dbd | Panagiotis Kanavos | public DateTime LastCheckTime { get; private set; } |
28 | 46426dbd | Panagiotis Kanavos | public String SkipThisVersion { get; private set; } |
29 | 46426dbd | Panagiotis Kanavos | public Boolean DidRunOnce { get; private set; } |
30 | 46426dbd | Panagiotis Kanavos | public Boolean ShowDiagnosticWindow { get; private set; } |
31 | 46426dbd | Panagiotis Kanavos | public DateTime LastProfileUpdate { get; private set; } |
32 | 46426dbd | Panagiotis Kanavos | |
33 | 46426dbd | Panagiotis Kanavos | /// <summary> |
34 | 46426dbd | Panagiotis Kanavos | /// If this property is true a reflection based accessor will be used |
35 | 46426dbd | Panagiotis Kanavos | /// to determine the assmebly name and verison, otherwise a System.Diagnostics |
36 | 46426dbd | Panagiotis Kanavos | /// based access will be used |
37 | 46426dbd | Panagiotis Kanavos | /// </summary> |
38 | 46426dbd | Panagiotis Kanavos | public Boolean UseReflectionBasedAssemblyAccessor { get; private set; } |
39 | 46426dbd | Panagiotis Kanavos | |
40 | 46426dbd | Panagiotis Kanavos | private String _referenceAssembly; |
41 | 46426dbd | Panagiotis Kanavos | |
42 | 46426dbd | Panagiotis Kanavos | /// <summary> |
43 | 46426dbd | Panagiotis Kanavos | /// The constructor reads out all configured values |
44 | 46426dbd | Panagiotis Kanavos | /// </summary> |
45 | 46426dbd | Panagiotis Kanavos | public NetSparkleConfiguration(String ReferenceAssembly) |
46 | 46426dbd | Panagiotis Kanavos | : this(ReferenceAssembly, true) |
47 | 46426dbd | Panagiotis Kanavos | { } |
48 | 46426dbd | Panagiotis Kanavos | |
49 | 46426dbd | Panagiotis Kanavos | public NetSparkleConfiguration(String ReferenceAssembly, Boolean UseReflectionBasedAssemblyAccessor) |
50 | 46426dbd | Panagiotis Kanavos | { |
51 | 46426dbd | Panagiotis Kanavos | // set the value |
52 | 46426dbd | Panagiotis Kanavos | this.UseReflectionBasedAssemblyAccessor = UseReflectionBasedAssemblyAccessor; |
53 | 46426dbd | Panagiotis Kanavos | |
54 | 46426dbd | Panagiotis Kanavos | // save the referecne assembly |
55 | 46426dbd | Panagiotis Kanavos | _referenceAssembly = ReferenceAssembly; |
56 | 46426dbd | Panagiotis Kanavos | |
57 | 46426dbd | Panagiotis Kanavos | try |
58 | 46426dbd | Panagiotis Kanavos | { |
59 | 46426dbd | Panagiotis Kanavos | // set default values |
60 | 46426dbd | Panagiotis Kanavos | InitWithDefaultValues(); |
61 | 46426dbd | Panagiotis Kanavos | |
62 | 46426dbd | Panagiotis Kanavos | // set some value from the binary |
63 | 46426dbd | Panagiotis Kanavos | NetSparkleAssemblyAccessor accessor = new NetSparkleAssemblyAccessor(ReferenceAssembly, this.UseReflectionBasedAssemblyAccessor); |
64 | 46426dbd | Panagiotis Kanavos | ApplicationName = accessor.AssemblyProduct; |
65 | 46426dbd | Panagiotis Kanavos | InstalledVersion = accessor.AssemblyVersion; |
66 | 46426dbd | Panagiotis Kanavos | |
67 | 46426dbd | Panagiotis Kanavos | // build the reg path |
68 | 46426dbd | Panagiotis Kanavos | String regPath = BuildRegistryPath(); |
69 | 46426dbd | Panagiotis Kanavos | |
70 | 46426dbd | Panagiotis Kanavos | // load the values |
71 | 46426dbd | Panagiotis Kanavos | LoadValuesFromPath(regPath); |
72 | 46426dbd | Panagiotis Kanavos | } |
73 | 46426dbd | Panagiotis Kanavos | catch (Exception e) |
74 | 46426dbd | Panagiotis Kanavos | { |
75 | 46426dbd | Panagiotis Kanavos | // disable update checks when exception was called |
76 | 46426dbd | Panagiotis Kanavos | CheckForUpdate = false; |
77 | 46426dbd | Panagiotis Kanavos | |
78 | 46426dbd | Panagiotis Kanavos | if (e.Message.Contains("STOP:")) |
79 | 46426dbd | Panagiotis Kanavos | throw e; |
80 | 46426dbd | Panagiotis Kanavos | } |
81 | 46426dbd | Panagiotis Kanavos | } |
82 | 46426dbd | Panagiotis Kanavos | |
83 | 46426dbd | Panagiotis Kanavos | /// <summary> |
84 | 46426dbd | Panagiotis Kanavos | /// Touches to profile time |
85 | 46426dbd | Panagiotis Kanavos | /// </summary> |
86 | 46426dbd | Panagiotis Kanavos | public void TouchProfileTime() |
87 | 46426dbd | Panagiotis Kanavos | { |
88 | 46426dbd | Panagiotis Kanavos | // set the prodilt update time |
89 | 46426dbd | Panagiotis Kanavos | LastProfileUpdate = DateTime.Now; |
90 | 46426dbd | Panagiotis Kanavos | |
91 | 46426dbd | Panagiotis Kanavos | // build path |
92 | 46426dbd | Panagiotis Kanavos | String path = BuildRegistryPath(); |
93 | 46426dbd | Panagiotis Kanavos | |
94 | 46426dbd | Panagiotis Kanavos | // save the values |
95 | 46426dbd | Panagiotis Kanavos | SaveValuesToPath(path); |
96 | 46426dbd | Panagiotis Kanavos | } |
97 | 46426dbd | Panagiotis Kanavos | |
98 | 46426dbd | Panagiotis Kanavos | /// <summary> |
99 | 46426dbd | Panagiotis Kanavos | /// Touches the check time to now, should be used after a check directly |
100 | 46426dbd | Panagiotis Kanavos | /// </summary> |
101 | 46426dbd | Panagiotis Kanavos | public void TouchCheckTime() |
102 | 46426dbd | Panagiotis Kanavos | { |
103 | 46426dbd | Panagiotis Kanavos | // set the check tiem |
104 | 46426dbd | Panagiotis Kanavos | LastCheckTime = DateTime.Now; |
105 | 46426dbd | Panagiotis Kanavos | |
106 | 46426dbd | Panagiotis Kanavos | // build path |
107 | 46426dbd | Panagiotis Kanavos | String path = BuildRegistryPath(); |
108 | 46426dbd | Panagiotis Kanavos | |
109 | 46426dbd | Panagiotis Kanavos | // save the values |
110 | 46426dbd | Panagiotis Kanavos | SaveValuesToPath(path); |
111 | 46426dbd | Panagiotis Kanavos | } |
112 | 46426dbd | Panagiotis Kanavos | |
113 | 46426dbd | Panagiotis Kanavos | /// <summary> |
114 | 46426dbd | Panagiotis Kanavos | /// This method allows to skip a specific version |
115 | 46426dbd | Panagiotis Kanavos | /// </summary> |
116 | 46426dbd | Panagiotis Kanavos | /// <param name="version"></param> |
117 | 46426dbd | Panagiotis Kanavos | public void SetVersionToSkip(String version) |
118 | 46426dbd | Panagiotis Kanavos | { |
119 | 46426dbd | Panagiotis Kanavos | // set the check tiem |
120 | 46426dbd | Panagiotis Kanavos | SkipThisVersion = version; |
121 | 46426dbd | Panagiotis Kanavos | |
122 | 46426dbd | Panagiotis Kanavos | // build path |
123 | 46426dbd | Panagiotis Kanavos | String path = BuildRegistryPath(); |
124 | 46426dbd | Panagiotis Kanavos | |
125 | 46426dbd | Panagiotis Kanavos | // save the values |
126 | 46426dbd | Panagiotis Kanavos | SaveValuesToPath(path); |
127 | 46426dbd | Panagiotis Kanavos | } |
128 | 46426dbd | Panagiotis Kanavos | |
129 | 46426dbd | Panagiotis Kanavos | /// <summary> |
130 | 46426dbd | Panagiotis Kanavos | /// This function build a valid registry path in dependecy to the |
131 | 46426dbd | Panagiotis Kanavos | /// assembly information |
132 | 46426dbd | Panagiotis Kanavos | /// </summary> |
133 | 46426dbd | Panagiotis Kanavos | /// <returns></returns> |
134 | 46426dbd | Panagiotis Kanavos | private String BuildRegistryPath() |
135 | 46426dbd | Panagiotis Kanavos | { |
136 | 46426dbd | Panagiotis Kanavos | NetSparkleAssemblyAccessor accessor = new NetSparkleAssemblyAccessor(_referenceAssembly, UseReflectionBasedAssemblyAccessor); |
137 | 46426dbd | Panagiotis Kanavos | |
138 | 46426dbd | Panagiotis Kanavos | if (accessor.AssemblyCompany == null || accessor.AssemblyCompany.Length == 0 || |
139 | 46426dbd | Panagiotis Kanavos | accessor.AssemblyProduct == null || accessor.AssemblyProduct.Length == 0) |
140 | 46426dbd | Panagiotis Kanavos | throw new Exception("STOP: Sparkle is missing the company or productname tag in " + _referenceAssembly); |
141 | 46426dbd | Panagiotis Kanavos | |
142 | 46426dbd | Panagiotis Kanavos | return "Software\\" + accessor.AssemblyCompany + "\\" + accessor.AssemblyProduct + "\\AutoUpdate"; |
143 | 46426dbd | Panagiotis Kanavos | } |
144 | 46426dbd | Panagiotis Kanavos | |
145 | 46426dbd | Panagiotis Kanavos | /// <summary> |
146 | 46426dbd | Panagiotis Kanavos | /// This method set's default values for the config |
147 | 46426dbd | Panagiotis Kanavos | /// </summary> |
148 | 46426dbd | Panagiotis Kanavos | private void InitWithDefaultValues() |
149 | 46426dbd | Panagiotis Kanavos | { |
150 | 46426dbd | Panagiotis Kanavos | CheckForUpdate = true; |
151 | 46426dbd | Panagiotis Kanavos | LastCheckTime = new DateTime(0); |
152 | 46426dbd | Panagiotis Kanavos | SkipThisVersion = String.Empty; |
153 | 46426dbd | Panagiotis Kanavos | DidRunOnce = false; |
154 | 46426dbd | Panagiotis Kanavos | UseReflectionBasedAssemblyAccessor = true; |
155 | 46426dbd | Panagiotis Kanavos | } |
156 | 46426dbd | Panagiotis Kanavos | |
157 | 46426dbd | Panagiotis Kanavos | /// <summary> |
158 | 46426dbd | Panagiotis Kanavos | /// This method loads the values from registry |
159 | 46426dbd | Panagiotis Kanavos | /// </summary> |
160 | 46426dbd | Panagiotis Kanavos | /// <param name="regPath"></param> |
161 | 46426dbd | Panagiotis Kanavos | /// <returns></returns> |
162 | 46426dbd | Panagiotis Kanavos | private Boolean LoadValuesFromPath(String regPath) |
163 | 46426dbd | Panagiotis Kanavos | { |
164 | 46426dbd | Panagiotis Kanavos | RegistryKey key = Registry.CurrentUser.OpenSubKey(regPath); |
165 | 46426dbd | Panagiotis Kanavos | if (key == null) |
166 | 46426dbd | Panagiotis Kanavos | return false; |
167 | 46426dbd | Panagiotis Kanavos | else |
168 | 46426dbd | Panagiotis Kanavos | { |
169 | 46426dbd | Panagiotis Kanavos | // read out |
170 | 46426dbd | Panagiotis Kanavos | String strCheckForUpdate = key.GetValue("CheckForUpdate", "True") as String; |
171 | 46426dbd | Panagiotis Kanavos | String strLastCheckTime = key.GetValue("LastCheckTime", new DateTime(0).ToString()) as String; |
172 | 46426dbd | Panagiotis Kanavos | String strSkipThisVersion = key.GetValue("SkipThisVersion", "") as String; |
173 | 46426dbd | Panagiotis Kanavos | String strDidRunOnc = key.GetValue("DidRunOnce", "False") as String; |
174 | 46426dbd | Panagiotis Kanavos | String strShowDiagnosticWindow = key.GetValue("ShowDiagnosticWindow", "False") as String; |
175 | 46426dbd | Panagiotis Kanavos | String strProfileTime = key.GetValue("LastProfileUpdate", new DateTime(0).ToString()) as String; |
176 | 46426dbd | Panagiotis Kanavos | |
177 | 46426dbd | Panagiotis Kanavos | // convert th right datatypes |
178 | 46426dbd | Panagiotis Kanavos | CheckForUpdate = Convert.ToBoolean(strCheckForUpdate); |
179 | 46426dbd | Panagiotis Kanavos | LastCheckTime = Convert.ToDateTime(strLastCheckTime); |
180 | 46426dbd | Panagiotis Kanavos | SkipThisVersion = strSkipThisVersion; |
181 | 46426dbd | Panagiotis Kanavos | DidRunOnce = Convert.ToBoolean(strDidRunOnc); |
182 | 46426dbd | Panagiotis Kanavos | ShowDiagnosticWindow = Convert.ToBoolean(strShowDiagnosticWindow); |
183 | 46426dbd | Panagiotis Kanavos | LastProfileUpdate = Convert.ToDateTime(strProfileTime); |
184 | 46426dbd | Panagiotis Kanavos | return true; |
185 | 46426dbd | Panagiotis Kanavos | } |
186 | 46426dbd | Panagiotis Kanavos | } |
187 | 46426dbd | Panagiotis Kanavos | |
188 | 46426dbd | Panagiotis Kanavos | /// <summary> |
189 | 46426dbd | Panagiotis Kanavos | /// This method store the information into registry |
190 | 46426dbd | Panagiotis Kanavos | /// </summary> |
191 | 46426dbd | Panagiotis Kanavos | /// <param name="regPath"></param> |
192 | 46426dbd | Panagiotis Kanavos | /// <returns></returns> |
193 | 46426dbd | Panagiotis Kanavos | private Boolean SaveValuesToPath(String regPath) |
194 | 46426dbd | Panagiotis Kanavos | { |
195 | 46426dbd | Panagiotis Kanavos | RegistryKey key = Registry.CurrentUser.CreateSubKey(regPath); |
196 | 46426dbd | Panagiotis Kanavos | if (key == null) |
197 | 46426dbd | Panagiotis Kanavos | return false; |
198 | 46426dbd | Panagiotis Kanavos | else |
199 | 46426dbd | Panagiotis Kanavos | { |
200 | 46426dbd | Panagiotis Kanavos | // convert to regsz |
201 | 46426dbd | Panagiotis Kanavos | String strCheckForUpdate = CheckForUpdate.ToString(); |
202 | 46426dbd | Panagiotis Kanavos | String strLastCheckTime = LastCheckTime.ToString(); |
203 | 46426dbd | Panagiotis Kanavos | String strSkipThisVersion = SkipThisVersion.ToString(); |
204 | 46426dbd | Panagiotis Kanavos | String strDidRunOnc = DidRunOnce.ToString(); |
205 | 46426dbd | Panagiotis Kanavos | String strProfileTime = LastProfileUpdate.ToString(); |
206 | 46426dbd | Panagiotis Kanavos | |
207 | 46426dbd | Panagiotis Kanavos | // set the values |
208 | 46426dbd | Panagiotis Kanavos | key.SetValue("CheckForUpdate", strCheckForUpdate, RegistryValueKind.String); |
209 | 46426dbd | Panagiotis Kanavos | key.SetValue("LastCheckTime", strLastCheckTime, RegistryValueKind.String); |
210 | 46426dbd | Panagiotis Kanavos | key.SetValue("SkipThisVersion", strSkipThisVersion, RegistryValueKind.String); |
211 | 46426dbd | Panagiotis Kanavos | key.SetValue("DidRunOnce", strDidRunOnc, RegistryValueKind.String); |
212 | 46426dbd | Panagiotis Kanavos | key.SetValue("LastProfileUpdate", strProfileTime, RegistryValueKind.String); |
213 | 46426dbd | Panagiotis Kanavos | |
214 | 46426dbd | Panagiotis Kanavos | return true; |
215 | 46426dbd | Panagiotis Kanavos | } |
216 | 46426dbd | Panagiotis Kanavos | } |
217 | 46426dbd | Panagiotis Kanavos | |
218 | 46426dbd | Panagiotis Kanavos | } |
219 | 46426dbd | Panagiotis Kanavos | } |