⾦蝶K3WISE版本过服务期后打补丁⽅法-完善版本读了这位博主的内容有所启发
⾦蝶补丁⼀般安装过后,都会进⾏解包,分两部分,第⼀部分为完整解包,第⼆部分为使⽤备份包
先讲第⼆部分,使⽤的备份包,也就这⾥有⽤,不是全系列产品完整的包补丁内容。
⽐如,k3 wise 15.0 PT124991包,只需要更新 ⼀个exe和VER内容,其他不需要的东东,不在此处体现,在完整包⾥⾯体现。 Kingdee_SP_Install_Log_PT124991.log,为安装⽇志,从⽽可以⽤来参考复制到哪⾥。
********* Start installation: 6-17-2020 09:31:54 *********
File : C:\Program Files (x86)\Kingdee\
FileName :
Path : C:\Program Files (x86)\Kingdee\K3ERP\
Backup File :  C:\Program Files (x86)\Kingdee\
Replace File:  C:\Program Files (x86)\Kingdee\
File : C:\Program Files (x86)\Kingdee\K3ERP\KDSYSTEM\K3MFYGLMakeVoucher.VBR
FileName : K3MFYGLMakeVoucher.VBR
Path : C:\Program Files (x86)\Kingdee\K3ERP\KDSYSTEM\
Backup File :  C:\Program Files (x86)\Kingdee\K3ERP\KDSYSTEM\K3MFYGLMakeVoucher.VBR
Replace File:  C:\Program Files (x86)\Kingdee\K3ERP\KDSYSTEM\K3MFYGLMakeVoucher.VBR
------- Finish Copying File(s): 6-17-2020 09:32:34 -------
call BatAndExe.bat
********** 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.
这个程序在⾦蝶安装根⽬录⾥⾯,将其删掉,或者改名就好。
Program
using System;
using System.Windows;
using Kingdee.K3.BaseNet.AutoUpdatePatchCommon;
namespace Kingdee.K3.BaseNet.UpdatePatchApp
{
// Token: 0x02000003 RID: 3
public class Program
{
// Token: 0x06000005 RID: 5 RVA: 0x000021D0 File Offset: 0x000003D0
[STAThread]
private static void Main(string[] args)
{
Log.WriteLog("进⼊客户端补丁升级⼯具Kingdee.K3.");
splitwiseif (args == null || args.Length != 1)
{
Log.WriteLog("args == null || args.Length != 1,退出客户端补丁升级⼯具!");
return;
}
Log.WriteLog("外部传⼊客户端补丁升级⼯具参数:" + args[0]);
new Application().Run(new ProgressWindow(args[0]));
}
}
}
Common
using System;
using System.Diagnostics;
using System.Reflection;
using Kingdee.K3.BaseNet.AutoUpdatePatchCommon;
namespace Kingdee.K3.BaseNet.UpdatePatchApp
{
// Token: 0x02000002 RID: 2
public class Common
{
// Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250
public static string LoadKDString(string strText)
{
string result;
try
{
Type typeFromProgID = Type.GetTypeFromProgID("K3BaseDataAccess.CMultiLanguage");
object target = Activator.CreateInstance(typeFromProgID);
object[] args = new object[]
{
strText,
"K3Base"
};
result = (string)typeFromProgID.InvokeMember("LoadKDString", BindingFlags.Public | BindingFlags.InvokeMethod, null, target, args);            }
catch
{
Log.WriteLog("Kingdee.K3.BaseNet.UpdatePathApp.LoadKDString(),Error strText=" + strText);                result = strText;
}
return result;
}
// Token: 0x06000002 RID: 2 RVA: 0x000020CC File Offset: 0x000002CC
public static bool IsOpenAntivirus()
{
bool result = false;
try
{
Process[] processesByName = Process.GetProcessesByName("360sd");
if (processesByName.Length == 0)
{
processesByName = Process.GetProcessesByName("360Tray");
if (processesByName.Length > 0)
{
Log.WriteLog("检测到客户端安装了360安全卫⼠");
result = true;
}
}
else
{
Log.WriteLog("检测到客户端安装了360杀毒软件");
result = true;
}
}
catch (Exception ex)
{
Log.WriteLog("判断是否开启杀毒软件报错IsOpenAntivirus:" + ex.ToString());
}
return result;
}
// Token: 0x06000003 RID: 3 RVA: 0x00002144 File Offset: 0x00000344
public static void ClosedK3Proc(string strProcName)
{
try
{
Log.WriteLog(string.Format("检测K3进程{0}", strProcName));
Process[] processesByName = Process.GetProcessesByName(strProcName);
int num = processesByName.Length;
Log.WriteLog(string.Format("检测K3进程{0}有{1}个,下⼀步这些关闭进程", strProcName, num));                if (num > 0)
{
for (int i = 0; i < num; i++)
{
processesByName[i].Kill();
}
}
}
catch (Exception ex)
{
Log.WriteLog(string.Format("强制关闭{0}主控台报错:{1}", strProcName, ex.ToString()));
}
}
}
}
ProgressWindow

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。