金蝶K3 WISE版本过服务期后打补丁方法

读了这位博主的内容有所启发

https://blog.csdn.net/hzfw2008/article/details/106991629

金蝶补丁一般安装过后,都会进行解包,分两部分,第一部分为完整解包,第二部分为使用备份包

先讲第二部分,使用的备份包,也就这里有用,不是全系列产品完整的包补丁内容。

比如,k3 wise 15.0 PT124991包,只需要更新 一个exe和VER内容,其他不需要的东东,不在此处体现,在完整包里面体现。

Kingdee_SP_Install_Log_PT124991.log,为安装日志,从而可以用来参考复制到哪里。

  1. ********* Start installation: 6-17-2020 09:31:54 *********


  2. call K3DCOMManageStop.exe
  3. File : C:\Program Files (x86)\Kingdee\K3ERP\K3ClassDEFINENewUSER.exe
  4. FileName : K3ClassDEFINENewUSER.exe
  5. Path : C:\Program Files (x86)\Kingdee\K3ERP\
  6. Backup File : C:\Program Files (x86)\Kingdee\K3ERP\K3ClassDEFINENewUSER.exe
  7. Replace File: C:\Program Files (x86)\Kingdee\K3ERP\K3ClassDEFINENewUSER.exe

  8. File : C:\Program Files (x86)\Kingdee\K3ERP\KDSYSTEM\K3MFYGLMakeVoucher.VBR
  9. FileName : K3MFYGLMakeVoucher.VBR
  10. Path : C:\Program Files (x86)\Kingdee\K3ERP\KDSYSTEM\
  11. Backup File : C:\Program Files (x86)\Kingdee\K3ERP\KDSYSTEM\K3MFYGLMakeVoucher.VBR
  12. Replace File: C:\Program Files (x86)\Kingdee\K3ERP\KDSYSTEM\K3MFYGLMakeVoucher.VBR


  13. ------- Finish Copying File(s): 6-17-2020 09:32:34 -------

  14. call BatAndExe.bat

  15. call K3DCOMManageStart.exe

  16. ********** End installation: 6-17-2020 09:32:37 **********

现在讲第一部分

还以PT124991补丁包举例子,这里面是次补丁涉及到的所有,不仅局限与客户端、服务端,还有其他等等,也不用仔细研究这个,总之是完整解包的内容。

 KDPatchs这个文件夹其实木有卵用。

因为新的金蝶补丁全部加壳,在服务期内的通过验证后,可以打补丁。超过服务期的,正常是打不了的,可以通过如下方法变通处理下:

 1、找一台已经装好补丁的客户端(如果找不到,那就用金蝶服务器也行)。将客户端下面如下2个目录的文件夹打包压缩备用。如果提示被占用,请先使用任务管理器结束K3或者KD打头的进程;

2、在新的系统上按照标准方法安装金蝶K3客户端。跑一遍中间层组件注册;

3、将上面打包压缩的2个文件夹覆盖掉新系统的同名文件夹;

4、打开新系统的该目录,使用管理员权限运行如下2个批处理文件,重新进行组件注册;

这两个bat,一个是注册中间件的,一个是注册产品的。总之重新注册一下就好。

有人该问了,控制面板卸载软件里面有木有补丁包信息,已经注册表里面有木有,这个肯定木有了,相当于绿色了。这就涉及到第5条的内容,第5条继续说。

 

 

 

 5、运行桌面K3图标即可正常使用金蝶客户端。

这里就遇见坑了。什么坑呢,只要打开金蝶就自己下载补丁包进行安装,这不扯淡了嘛。本来拷贝过来的文件里面就有补丁。其实呢是因为一个自动打补丁的东东,只要你打开金蝶就开始检测注册表里面是不是已经安装过这个补丁了,没有就下载进行安装。

这么蛋疼的事情,就不备份已经安装过补丁电脑的相关注册表了,直接干掉这个自动补丁安装程序就好了。

Kingdee.K3.BaseNet.UpdatePatchApp.exe

这个程序在金蝶安装根目录里面,将其删掉,或者改名就好。

Program

  1. using System;
  2. using System.Windows;
  3. using Kingdee.K3.BaseNet.AutoUpdatePatchCommon;

  4. namespace Kingdee.K3.BaseNet.UpdatePatchApp
  5. {
  6. // Token: 0x02000003 RID: 3
  7. public class Program
  8. {
  9. // Token: 0x06000005 RID: 5 RVA: 0x000021D0 File Offset: 0x000003D0
  10. [STAThread]
  11. private static void Main(string[] args)
  12. {
  13. Log.WriteLog("进入客户端补丁升级工具Kingdee.K3.BaseNet.UpdatePatchApp.exe");
  14. if (args == null || args.Length != 1)
  15. {
  16. Log.WriteLog("args == null || args.Length != 1,退出客户端补丁升级工具!");
  17. return;
  18. }
  19. Log.WriteLog("外部传入客户端补丁升级工具参数:" + args[0]);
  20. new Application().Run(new ProgressWindow(args[0]));
  21. }
  22. }
  23. }

Common

  1. using System;
  2. using System.Diagnostics;
  3. using System.Reflection;
  4. using Kingdee.K3.BaseNet.AutoUpdatePatchCommon;

  5. namespace Kingdee.K3.BaseNet.UpdatePatchApp
  6. {
  7. // Token: 0x02000002 RID: 2
  8. public class Common
  9. {
  10. // Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250
  11. public static string LoadKDString(string strText)
  12. {
  13. string result;
  14. try
  15. {
  16. Type typeFromProgID = Type.GetTypeFromProgID("K3BaseDataAccess.CMultiLanguage");
  17. object target = Activator.CreateInstance(typeFromProgID);
  18. object[] args = new object[]
  19. {
  20. strText,
  21. "K3Base"
  22. };
  23. result = (string)typeFromProgID.InvokeMember("LoadKDString", BindingFlags.Public | BindingFlags.InvokeMethod, null, target, args);
  24. }
  25. catch
  26. {
  27. Log.WriteLog("Kingdee.K3.BaseNet.UpdatePathApp.LoadKDString(),Error strText=" + strText);
  28. result = strText;
  29. }
  30. return result;
  31. }

  32. // Token: 0x06000002 RID: 2 RVA: 0x000020CC File Offset: 0x000002CC
  33. public static bool IsOpenAntivirus()
  34. {
  35. bool result = false;
  36. try
  37. {
  38. Process[] processesByName = Process.GetProcessesByName("360sd");
  39. if (processesByName.Length == 0)
  40. {
  41. processesByName = Process.GetProcessesByName("360Tray");
  42. if (processesByName.Length > 0)
  43. {
  44. Log.WriteLog("检测到客户端安装了360安全卫士");
  45. result = true;
  46. }
  47. }
  48. else
  49. {
  50. Log.WriteLog("检测到客户端安装了360杀毒软件");
  51. result = true;
  52. }
  53. }
  54. catch (Exception ex)
  55. {
  56. Log.WriteLog("判断是否开启杀毒软件报错IsOpenAntivirus:" + ex.ToString());
  57. }
  58. return result;
  59. }

  60. // Token: 0x06000003 RID: 3 RVA: 0x00002144 File Offset: 0x00000344
  61. public static void ClosedK3Proc(string strProcName)
  62. {
  63. try
  64. {
  65. Log.WriteLog(string.Format("检测K3进程{0}", strProcName));
  66. Process[] processesByName = Process.GetProcessesByName(strProcName);
  67. int num = processesByName.Length;
  68. Log.WriteLog(string.Format("检测K3进程{0}有{1}个,下一步这些关闭进程", strProcName, num));
  69. if (num > 0)
  70. {
  71. for (int i = 0; i < num; i++)
  72. {
  73. processesByName[i].Kill();
  74. }
  75. }
  76. }
  77. catch (Exception ex)
  78. {
  79. Log.WriteLog(string.Format("强制关闭{0}主控台报错:{1}", strProcName, ex.ToString()));
  80. }
  81. }
  82. }
  83. }

ProgressWindow

  1. using System;
  2. using System.CodeDom.Compiler;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Diagnostics;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Threading;
  9. using System.Windows;
  10. using System.Windows.Controls;
  11. using System.Windows.Markup;
  12. using System.Windows.Media;
  13. using System.Windows.Media.Animation;
  14. using System.Windows.Threading;
  15. using Kingdee.K3.BaseNet.AutoUpdatePatchClient;
  16. using Kingdee.K3.BaseNet.AutoUpdatePatchCommon;

  17. namespace Kingdee.K3.BaseNet.UpdatePatchApp
  18. {
  19. // Token: 0x02000004 RID: 4
  20. public class ProgressWindow : Window, IComponentConnector
  21. {
  22. // Token: 0x17000001 RID: 1
  23. // (get) Token: 0x06000007 RID: 7 RVA: 0x00002228 File Offset: 0x00000428
  24. // (set) Token: 0x06000008 RID: 8 RVA: 0x0000223A File Offset: 0x0000043A
  25. public string Message
  26. {
  27. get
  28. {
  29. return (string)base.GetValue(ProgressWindow.MessageProperty);
  30. }
  31. set
  32. {
  33. base.SetValue(ProgressWindow.MessageProperty, value);
  34. }
  35. }

  36. // Token: 0x17000002 RID: 2
  37. // (get) Token: 0x06000009 RID: 9 RVA: 0x00002248 File Offset: 0x00000448
  38. // (set) Token: 0x0600000A RID: 10 RVA: 0x0000225A File Offset: 0x0000045A
  39. public int ProgressValue
  40. {
  41. get
  42. {
  43. return (int)base.GetValue(ProgressWindow.ProgressValueProperty);
  44. }
  45. set
  46. {
  47. base.SetValue(ProgressWindow.ProgressValueProperty, value);
  48. }
  49. }

  50. // Token: 0x17000003 RID: 3
  51. // (get) Token: 0x0600000B RID: 11 RVA: 0x0000226D File Offset: 0x0000046D
  52. // (set) Token: 0x0600000C RID: 12 RVA: 0x0000227F File Offset: 0x0000047F
  53. public int ProgressMaximum
  54. {
  55. get
  56. {
  57. return (int)base.GetValue(ProgressWindow.ProgressMaximumProperty);
  58. }
  59. set
  60. {
  61. base.SetValue(ProgressWindow.ProgressMaximumProperty, value);
  62. }
  63. }

  64. // Token: 0x0600000D RID: 13 RVA: 0x00002294 File Offset: 0x00000494
  65. public ProgressWindow(string k3StartupProgromName)
  66. {
  67. try
  68. {
  69. this.m_lstNeedInstallPatch = this.GetNeesInstallPatchs();
  70. if (this.m_lstNeedInstallPatch.Count == 0)
  71. {
  72. Log.WriteLog(string.Format("本客户端没有补丁需要安装,直接退出补丁更新工具", new object[0]));
  73. Application.Current.Shutdown();
  74. }
  75. else
  76. {
  77. string text = "";
  78. try
  79. {
  80. text = PatchVerify.GetRegistryKeyValue("", "IsAuto");
  81. }
  82. catch (Exception)
  83. {
  84. }
  85. Log.WriteLog("读取注册表 IsAuto=" + text + "," + ((text == "1") ? "当前机器正在安装补丁,请稍后再尝试!。" : "空值可进行补丁安装"));
  86. if (text == "1")
  87. {
  88. Process[] processesByName = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);
  89. if (processesByName.Length > 1)
  90. {
  91. MessageBox.Show(Common.LoadKDString("客户端正在更新补丁,请稍后再尝试!"), Common.LoadKDString("金蝶提示"), MessageBoxButton.OK, MessageBoxImage.Asterisk);
  92. Application.Current.Shutdown();
  93. return;
  94. }
  95. }
  96. this.InitializeComponent();
  97. base.DataContext = this;
  98. this._k3StartupProgromName = k3StartupProgromName;
  99. }
  100. }
  101. catch (Exception ex)
  102. {
  103. Log.WriteLog(string.Format("补丁更新工具报错,直接退出:{0}", ex.ToString()));
  104. }
  105. }

  106. // Token: 0x0600000E RID: 14 RVA: 0x000024AC File Offset: 0x000006AC
  107. private void UpdatePatchs()
  108. {
  109. bool flag = false;
  110. try
  111. {
  112. PatchVerify.SetIsAutoRegedit("1");
  113. }
  114. catch (Exception ex)
  115. {
  116. Log.WriteLog("读取注册表" + ex.ToString());
  117. }
  118. Action<string> method = delegate(string message)
  119. {
  120. this.Message = message;
  121. };
  122. Action<int> method2 = delegate(int progressValue)
  123. {
  124. this.ProgressValue = progressValue;
  125. };
  126. Action<int> method3 = delegate(int progressMaximum)
  127. {
  128. this.ProgressMaximum = progressMaximum;
  129. };
  130. Action method4 = delegate()
  131. {
  132. Storyboard storyboard = base.Resources["ClosedStoryboard"] as Storyboard;
  133. storyboard.Completed += delegate(object A_1, EventArgs A_2)
  134. {
  135. base.Close();
  136. };
  137. storyboard.Begin();
  138. };
  139. try
  140. {
  141. Thread.Sleep(3000);
  142. ProcessStartInfo processStartInfo = null;
  143. Process process = null;
  144. int num = 0;
  145. bool flag2 = true;
  146. Func<bool> func = delegate()
  147. {
  148. process = new Process
  149. {
  150. StartInfo = processStartInfo
  151. };
  152. process.Start();
  153. bool result = process.WaitForExit(1800000);
  154. process.Close();
  155. return result;
  156. };
  157. List<string> lstNeedInstallPatch = this.m_lstNeedInstallPatch;
  158. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method3, lstNeedInstallPatch.Count * 4);
  159. int num2 = 0;
  160. int count = lstNeedInstallPatch.Count;
  161. foreach (string text in lstNeedInstallPatch)
  162. {
  163. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method2, num2 * 4);
  164. string[] array = text.Split(new char[]
  165. {
  166. '|'
  167. });
  168. bool flag3 = array[0] == "0";
  169. string patchNo = array[1];
  170. string arg = string.Concat(new object[]
  171. {
  172. Common.LoadKDString("正在安装第"),
  173. num2 + 1,
  174. Common.LoadKDString("个补丁"),
  175. patchNo,
  176. Common.LoadKDString(",共"),
  177. count,
  178. Common.LoadKDString("个,请稍候...")
  179. });
  180. PatchTransfer patchTransfer = new PatchTransfer();
  181. string text2 = Path.Combine(SocketTransferData.PatchDiretory, string.Format("{0}.rar", patchNo));
  182. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method2, num2 * 4 + 1);
  183. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, arg);
  184. patchTransfer.DownloadPatchToServer(string.Format("{0}.rar", patchNo), ref num);
  185. if (flag2)
  186. {
  187. string text3 = Path.Combine(Path.Combine(SocketTransferData.PatchDiretory, patchNo), string.Format("{0}.exe", patchNo));
  188. if (flag3 && PatchVerify.IsPatchInstallLocal(patchNo))
  189. {
  190. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, patchNo + Common.LoadKDString("已安装,不进行重复安装"));
  191. Log.WriteLog(string.Format("{0}已安装,不进行重复安装", patchNo));
  192. continue;
  193. }
  194. string text4 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WinRAR.exe");
  195. Path.GetDirectoryName(text4);
  196. FileInfo fileInfo = new FileInfo(text2);
  197. string arguments = string.Format("x \"{0}\" \"{1}\" -y -ibck -inul", text2, fileInfo.DirectoryName);
  198. if (File.Exists(text2))
  199. {
  200. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method2, num2 * 4 + 2);
  201. processStartInfo = new ProcessStartInfo
  202. {
  203. FileName = text4,
  204. Arguments = arguments,
  205. WindowStyle = ProcessWindowStyle.Hidden,
  206. UseShellExecute = false,
  207. CreateNoWindow = true,
  208. RedirectStandardError = true,
  209. RedirectStandardInput = true,
  210. RedirectStandardOutput = true,
  211. Verb = "runas"
  212. };
  213. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, Common.LoadKDString("正在解压") + patchNo);
  214. if (func())
  215. {
  216. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, patchNo + Common.LoadKDString("已解压"));
  217. Log.WriteLog(string.Format("{0}已解压", patchNo));
  218. PatchVerify.DeleteRegedit(patchNo);
  219. if (File.Exists(text3))
  220. {
  221. processStartInfo = new ProcessStartInfo
  222. {
  223. FileName = text3,
  224. WindowStyle = ProcessWindowStyle.Hidden,
  225. UseShellExecute = false,
  226. CreateNoWindow = true,
  227. Arguments = " -slient",
  228. Verb = "runas"
  229. };
  230. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, arg);
  231. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method2, num2 * 4 + 3);
  232. if (func())
  233. {
  234. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, Common.LoadKDString("已安装") + patchNo);
  235. Log.WriteLog(string.Format("{0}已安装", patchNo));
  236. if (!flag3)
  237. {
  238. if ((from dr1 in PatchInstall.dt_InstalledPatch
  239. where dr1.PatchNo == patchNo
  240. select 1).Count<int>() == 0)
  241. {
  242. DataSet1.DT_InstalledPatchRow dt_InstalledPatchRow = PatchInstall.dt_InstalledPatch.NewDT_InstalledPatchRow();
  243. dt_InstalledPatchRow.PatchNo = patchNo;
  244. PatchInstall.dt_InstalledPatch.AddDT_InstalledPatchRow(dt_InstalledPatchRow);
  245. PatchInstall.dt_InstalledPatch.WriteXml(PatchInstall.installedPatchFilePath);
  246. }
  247. Log.WriteLog(string.Format("{0}已更新补丁状态", patchNo));
  248. }
  249. }
  250. else
  251. {
  252. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, patchNo + Common.LoadKDString("安装失败"));
  253. Log.WriteLog(string.Format("{0}安装失败", patchNo));
  254. File.Delete(text3);
  255. if (flag3)
  256. {
  257. flag2 = false;
  258. continue;
  259. }
  260. continue;
  261. }
  262. }
  263. else
  264. {
  265. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, Common.LoadKDString("无法找到补丁文件") + text3);
  266. Log.WriteLog(string.Format("无法找到补丁文件 {0}", text3));
  267. }
  268. }
  269. else
  270. {
  271. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, patchNo + Common.LoadKDString("解压失败"));
  272. Log.WriteLog(string.Format("{0}解压失败", patchNo));
  273. if (flag3)
  274. {
  275. flag2 = false;
  276. continue;
  277. }
  278. continue;
  279. }
  280. }
  281. else
  282. {
  283. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, Common.LoadKDString("无法找到补丁压缩包文件") + text2);
  284. Log.WriteLog(string.Format("无法找到补丁压缩包文件 {0}", text2));
  285. }
  286. }
  287. else
  288. {
  289. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, Common.LoadKDString("由于前置补丁安装异常,未安装") + patchNo);
  290. Log.WriteLog(string.Format("由于前置补丁安装异常,{0}未安装", patchNo));
  291. if (!flag3)
  292. {
  293. flag2 = true;
  294. }
  295. }
  296. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method2, num2 * 4 + 4);
  297. num2++;
  298. }
  299. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method, Common.LoadKDString("更新完成,启动K3WISE控制台"));
  300. flag = true;
  301. }
  302. catch (Exception ex2)
  303. {
  304. flag = false;
  305. Log.WriteLog(ex2.ToString());
  306. }
  307. finally
  308. {
  309. try
  310. {
  311. PatchVerify.SetIsAutoRegedit("");
  312. }
  313. catch (Exception ex3)
  314. {
  315. Log.WriteLog("读取注册表" + ex3.ToString());
  316. }
  317. Thread.Sleep(1000);
  318. base.Dispatcher.Invoke(DispatcherPriority.SystemIdle, method4);
  319. if (!flag)
  320. {
  321. MessageBoxResult messageBoxResult = MessageBox.Show(Common.LoadKDString("补丁安装过程中出现异常,可能导致K3使用过程中出现异常,请联系管理员。\r\n是否要继续打开K3?"), Common.LoadKDString("金蝶提示"), MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
  322. if (messageBoxResult == MessageBoxResult.Yes)
  323. {
  324. flag = true;
  325. }
  326. }
  327. if (flag)
  328. {
  329. string text5 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, this._k3StartupProgromName + ".exe");
  330. Log.WriteLog("补丁更新完成,启动主控台,启动路径:" + text5);
  331. if (!File.Exists(text5))
  332. {
  333. MessageBox.Show(text5 + Common.LoadKDString("路径不正确!"));
  334. }
  335. ProcessStartInfo startInfo = new ProcessStartInfo
  336. {
  337. FileName = text5,
  338. WindowStyle = ProcessWindowStyle.Hidden,
  339. UseShellExecute = false,
  340. Arguments = "updated",
  341. Verb = "runas"
  342. };
  343. Process process2 = new Process
  344. {
  345. StartInfo = startInfo
  346. };
  347. process2.Start();
  348. }
  349. }
  350. }

  351. // Token: 0x0600000F RID: 15 RVA: 0x00002D30 File Offset: 0x00000F30
  352. private List<string> GetNeesInstallPatchs()
  353. {
  354. List<string> list = new List<string>();
  355. try
  356. {
  357. bool flag = PatchInstall.IsNeedUpdatePatch();
  358. if (flag)
  359. {
  360. list = PatchInstall.m_NeedInstallPatchList;
  361. if (list == null)
  362. {
  363. Log.WriteLog(string.Format("方法GetNeesInstallPatchs判断客户端是否有补丁需要安装得出值为null", new object[0]));
  364. return list;
  365. }
  366. int count = list.Count;
  367. Log.WriteLog(string.Format("方法GetNeesInstallPatchs判断客户端是否有补丁需要安装检测到有{0}个补丁需要安装", count));
  368. for (int i = count - 1; i >= 0; i--)
  369. {
  370. string text = list[i];
  371. string[] array = text.Split(new char[]
  372. {
  373. '|'
  374. });
  375. string text2 = array[1];
  376. bool flag2 = PatchVerify.IsPatchInstallLocal(text2);
  377. if (flag2)
  378. {
  379. list.RemoveAt(i);
  380. }
  381. }
  382. }
  383. }
  384. catch (Exception ex)
  385. {
  386. Log.WriteLog(string.Format("方法GetNeesInstallPatchs判断客户端是否有补丁需要安装报错:{0}", ex.ToString()));
  387. }
  388. return list;
  389. }

  390. // Token: 0x06000010 RID: 16 RVA: 0x00002E28 File Offset: 0x00001028
  391. private void Window_Loaded(object sender, RoutedEventArgs e)
  392. {
  393. try
  394. {
  395. int count = this.m_lstNeedInstallPatch.Count;
  396. if (count > 0)
  397. {
  398. Common.ClosedK3Proc(this._k3StartupProgromName);
  399. (base.Resources["OpenStoryboard"] as Storyboard).Begin();
  400. this.Main.OpacityMask = (base.Resources["ClosedBrush"] as LinearGradientBrush);
  401. Log.WriteLog(string.Format("客户端补丁更新工具最终结果检测到有{0}个补丁需要在本客户端安装,马上进入安装阶段", count));
  402. if (Common.IsOpenAntivirus())
  403. {
  404. MessageBox.Show(Common.LoadKDString("安装补丁前请关闭杀毒软件!"), Common.LoadKDString("金蝶提示"), MessageBoxButton.OK, MessageBoxImage.Exclamation);
  405. }
  406. new Thread(new ThreadStart(this.UpdatePatchs)).Start();
  407. }
  408. else
  409. {
  410. Log.WriteLog(string.Format("本客户端没有补丁需要安装", new object[0]));
  411. }
  412. }
  413. catch (Exception ex)
  414. {
  415. Log.WriteLog(string.Format("客户端补丁更新工具Kingdee.K3.BaseNet.UpdatePatchApp.exe报错:{0}", ex.ToString()));
  416. }
  417. }

  418. // Token: 0x06000011 RID: 17 RVA: 0x00002F24 File Offset: 0x00001124
  419. [DebuggerNonUserCode]
  420. [GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
  421. public void InitializeComponent()
  422. {
  423. if (this._contentLoaded)
  424. {
  425. return;
  426. }
  427. this._contentLoaded = true;
  428. Uri resourceLocator = new Uri("/Kingdee.K3.BaseNet.UpdatePatchApp;component/progresswindow.xaml", UriKind.Relative);
  429. Application.LoadComponent(this, resourceLocator);
  430. }

  431. // Token: 0x06000012 RID: 18 RVA: 0x00002F54 File Offset: 0x00001154
  432. [GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
  433. [EditorBrowsable(EditorBrowsableState.Never)]
  434. [DebuggerNonUserCode]
  435. void IComponentConnector.Connect(int connectionId, object target)
  436. {
  437. switch (connectionId)
  438. {
  439. case 1:
  440. ((ProgressWindow)target).Loaded += this.Window_Loaded;
  441. return;
  442. case 2:
  443. this.Screen = (Grid)target;
  444. return;
  445. case 3:
  446. this.Main = (Border)target;
  447. return;
  448. default:
  449. this._contentLoaded = true;
  450. return;
  451. }
  452. }

  453. // Token: 0x04000001 RID: 1
  454. private string _k3StartupProgromName;

  455. // Token: 0x04000002 RID: 2
  456. public static readonly DependencyProperty MessageProperty = DependencyProperty.Register("Message", typeof(string), typeof(ProgressWindow), new PropertyMetadata(Common.LoadKDString("开始更新")));

  457. // Token: 0x04000003 RID: 3
  458. public static readonly DependencyProperty ProgressValueProperty = DependencyProperty.Register("ProgressValue", typeof(int), typeof(ProgressWindow), new PropertyMetadata(0));

  459. // Token: 0x04000004 RID: 4
  460. public static readonly DependencyProperty ProgressMaximumProperty = DependencyProperty.Register("ProgressMaximum", typeof(int), typeof(ProgressWindow), new PropertyMetadata(100));

  461. // Token: 0x04000005 RID: 5
  462. private List<string> m_lstNeedInstallPatch = new List<string>();

  463. // Token: 0x04000006 RID: 6
  464. internal Grid Screen;

  465. // Token: 0x04000007 RID: 7
  466. internal Border Main;

  467. // Token: 0x04000008 RID: 8
  468. private bool _contentLoaded;
  469. }
  470. }

至于有木有真正的打上补丁,自己去实验吧。总之我是验证过了,包括补丁包里面的内容md5值都已经比对过,和安装过补丁的电脑文件md5值一样。

有点拗口,这里可以忽略。

 使用的系统也忽略哈,Linux是我的主战场,一条md5sum进行计算,多么方便。

(0)

相关推荐