beijer ix developer 2.40 sp7 授权
ix developer 2.40 sp7
使用 dnspy
修改2个dll 内的LicenseFound方法
Tools.dll
// Neo.ApplicationFramework.Tools.License.LicenseService
// Token: 0x060002B8 RID: 696 RVA: 0x00011A94 File Offset: 0x0000FC94
protected override bool LicenseFound()
{
return true;
}
ToolsCF.dll
// Neo.ApplicationFramework.Tools.License.LicenseServiceBase
// Token: 0x06001E27 RID: 7719 RVA: 0x00085F8C File Offset: 0x0008418C
protected virtual bool LicenseFound()
{
return true;
}
到此, pc上面发布组态应该可以用了.
sp6,同上
sp4,差不多如下
CommonCF.dll
Neo.ApplicationFramework.Tools.License.LicenseServiceCF
protected virtual int ConnectedDataItemsLimit()
{
return 1220927819;
}
protected virtual int UnconnectedDataItemsLimit()
{
return 748856307;
}
protected virtual void Run(bool showStartupMessage)
{
}
protected virtual bool LicenseFound()
{
return true;
}
也可以使用内存钩子,动态拦截相关方法.自己写个dll ,如:ToolVip.Ix24LocalVip,在程序启动时候调用1次即可.
dll 使用了DotNetDetour 相关技术
using System.Reflection;
namespace ToolVip
{
/// <summary>
/// iX Developer 2.40 SP4 vip
/// 菜单--项目--引用的程序集--添加此控件
/// 主画面启动时候,脚本里面,调用:
/// ToolVip.Ix24LocalVip.Vip();
/// </summary>
public class Ix24LocalVip
{
public static bool Vip()
{
var mem = new MemVip();
var arg = new VipArg()
{
DllName = "ToolsCF",
ClassName = "Neo.ApplicationFramework.Tools.License.LicenseServiceCF",
MethondName = "LicenseFound",
BindingFlags1 = BindingFlags.Instance | BindingFlags.NonPublic,
};
var method2 =
typeof(Ix24LocalVip).GetMethod("LicenseFound", BindingFlags.Instance | BindingFlags.NonPublic);
var r = mem.Init(arg, method2);
return r;
}
protected virtual bool LicenseFound()
{
return true;
}
}
}
// C:\Program Files (x86)\Beijer Electronics AB\iX Developer 2.40 SP5\Bin\CommonCF.dll
// CommonCF, Version=2.45.167.0, Culture=neutral, PublicKeyToken=null
// Global type: <Module>
// Architecture: AnyCPU (64-bit preferred)
// Runtime: v2.0.50727
// Hash algorithm: SHA1
// Neo.ApplicationFramework.Interfaces.License.ILicenseService
using System.ComponentModel;
public interface ILicenseService
{
[EditorBrowsable(EditorBrowsableState.Always)]
bool ShowLicenseMessage { get; set; }
void Run(bool showStartupMessage);
int GetConnectedDataItemsLimit();
int GetUnconnectedDataItemsLimit();
bool LicenseFound();
}

浙公网安备 33010602011771号