公司软件加密
采用的是硬件加密狗+软件控制 加密狗通讯是用的一个用delphi写的DLL 问题就出现在这个上面
现在已基本完成..在开发环境下什么问题都没有 一切顺利 但一发布 有的系统就报错“外部组件出现异常”
这是出现在(Gost版下的Window XP SP2 个人版)IIS 5.1
但我很奇怪 在另外一台机器上(Win2000 企业版 + IIS 5.1)却什么问题都没有鄙人菜鸟..瞎猜两个原因
第一 我自己的程序问题
/// <summary>
/// 外部Dll注册基类
/// </summary>
public class ImportDLL
{
[DllImport("kernel32.dll")]
private extern static IntPtr LoadLibrary(String path); [DllImport("kernel32.dll")]
private extern static IntPtr GetProcAddress(IntPtr lib, String funcName); [DllImport("kernel32.dll")]
private extern static bool FreeLibrary(IntPtr lib); private IntPtr hLib; public ImportDLL(String DLLPath)
{
hLib = LoadLibrary(DLLPath);
} ~ImportDLL()
{
FreeLibrary(hLib);
} /// <summary>
/// 将要执行的函数转换为委托
/// </summary>
/// <param name="APIName">转换函数名称(DLL中的)</param>
/// <param name="t">类型</param>
/// <returns></returns>
public Delegate Invoke(String APIName, Type t)
{
IntPtr api = GetProcAddress(hLib, APIName);
return (Delegate)Marshal.GetDelegateForFunctionPointer(api, t);
}
}
/// <summary>
/// JBCUKey(加密狗)
/// </summary>
public partial class JBCUkey
{
private ImportDLL dll; /// <summary>
/// 加密狗
/// </summary>
/// <param name="Path">文件路径</param>
public JBCUkey(string Path)
{
dll = new ImportDLL(Path);
}
/// <summary>
/// 读取密文模块权限值
/// </summary>
/// <param name="UkeyInfo">密文</param>
/// <param name="ModuleId"> 模块ID
/// (1门禁管理;
/// 2考勤管理;3薪资管理;4收费管理;5记次收费;
/// 6会议签到;7停车管理;8宿舍管理)</param>
/// <param name="ReturnValue">返回值0/-1</param>
/// <returns></returns>
///
public delegate int ChkModuleGrant
(
[MarshalAs(UnmanagedType.LPArray)] char[] UkeyInfo,
int ModuleId
);//编译加密狗权限检测 public delegate int GetAllowClient
(
[MarshalAs(UnmanagedType.LPArray)] char [] UkeyInfo,ref int AllowClient
);//编译加密狗客户端数量检测 /// <summary>
/// 检查权限
/// </summary>
/// <returns>0/-1</returns>
public int CheckPopem(string UkeyInfo, int ModuleId)
{
ChkModuleGrant compile = (ChkModuleGrant)dll.Invoke("ChkModuleGrant", typeof(ChkModuleGrant));
int Popem =-1;//默认为无权限
Popem = compile(UkeyInfo.ToCharArray(), ModuleId);
return Popem;
}
/// <summary>
/// 允许连接客户端数量
/// </summary>
/// <param name="UkeyInfo">密文</param>
/// <returns>允许连接客户端数量</returns>
public int GetClientNumber(string UkeyInfo,ref int AllowClient)
{
GetAllowClient gac = (GetAllowClient)dll.Invoke("GetAllowClient", typeof(GetAllowClient));
int gcn = 0;//默认客户端为零
gcn = gac(UkeyInfo.ToCharArray(), ref AllowClient);
return gcn;
}
public void Dispose()
{ }
}
这两段是基本的注册外部DLL文件的步骤
程序里真正使用如下
string DMText;//密文
int UKClientNumber;//接受UK返回值
JBCUK UK=new JBCUkey(Server.MapPath("bin/JBCUkey.dll")); 说明一下 这个DLL已经被我添加到Bin文件夹下
UKResult = UK.GetClientNumber(DMText, ref UKClientNumber);第二点 就是 IIS配置的问题 这个问题 我真的是头大..实在搞不定 园子里有懂的兄弟没 。。 指点一下 。。
顶者都有分..等问题圆满解决 有需要这种加密方式的兄弟 可以找我要源码..包括那个delphi写的动态库..以及监控程序 统统提供源码(鄙人开源)
采用的是硬件加密狗+软件控制 加密狗通讯是用的一个用delphi写的DLL 问题就出现在这个上面
现在已基本完成..在开发环境下什么问题都没有 一切顺利 但一发布 有的系统就报错“外部组件出现异常”
这是出现在(Gost版下的Window XP SP2 个人版)IIS 5.1
但我很奇怪 在另外一台机器上(Win2000 企业版 + IIS 5.1)却什么问题都没有鄙人菜鸟..瞎猜两个原因
第一 我自己的程序问题
/// <summary>
/// 外部Dll注册基类
/// </summary>
public class ImportDLL
{
[DllImport("kernel32.dll")]
private extern static IntPtr LoadLibrary(String path); [DllImport("kernel32.dll")]
private extern static IntPtr GetProcAddress(IntPtr lib, String funcName); [DllImport("kernel32.dll")]
private extern static bool FreeLibrary(IntPtr lib); private IntPtr hLib; public ImportDLL(String DLLPath)
{
hLib = LoadLibrary(DLLPath);
} ~ImportDLL()
{
FreeLibrary(hLib);
} /// <summary>
/// 将要执行的函数转换为委托
/// </summary>
/// <param name="APIName">转换函数名称(DLL中的)</param>
/// <param name="t">类型</param>
/// <returns></returns>
public Delegate Invoke(String APIName, Type t)
{
IntPtr api = GetProcAddress(hLib, APIName);
return (Delegate)Marshal.GetDelegateForFunctionPointer(api, t);
}
}
/// <summary>
/// JBCUKey(加密狗)
/// </summary>
public partial class JBCUkey
{
private ImportDLL dll; /// <summary>
/// 加密狗
/// </summary>
/// <param name="Path">文件路径</param>
public JBCUkey(string Path)
{
dll = new ImportDLL(Path);
}
/// <summary>
/// 读取密文模块权限值
/// </summary>
/// <param name="UkeyInfo">密文</param>
/// <param name="ModuleId"> 模块ID
/// (1门禁管理;
/// 2考勤管理;3薪资管理;4收费管理;5记次收费;
/// 6会议签到;7停车管理;8宿舍管理)</param>
/// <param name="ReturnValue">返回值0/-1</param>
/// <returns></returns>
///
public delegate int ChkModuleGrant
(
[MarshalAs(UnmanagedType.LPArray)] char[] UkeyInfo,
int ModuleId
);//编译加密狗权限检测 public delegate int GetAllowClient
(
[MarshalAs(UnmanagedType.LPArray)] char [] UkeyInfo,ref int AllowClient
);//编译加密狗客户端数量检测 /// <summary>
/// 检查权限
/// </summary>
/// <returns>0/-1</returns>
public int CheckPopem(string UkeyInfo, int ModuleId)
{
ChkModuleGrant compile = (ChkModuleGrant)dll.Invoke("ChkModuleGrant", typeof(ChkModuleGrant));
int Popem =-1;//默认为无权限
Popem = compile(UkeyInfo.ToCharArray(), ModuleId);
return Popem;
}
/// <summary>
/// 允许连接客户端数量
/// </summary>
/// <param name="UkeyInfo">密文</param>
/// <returns>允许连接客户端数量</returns>
public int GetClientNumber(string UkeyInfo,ref int AllowClient)
{
GetAllowClient gac = (GetAllowClient)dll.Invoke("GetAllowClient", typeof(GetAllowClient));
int gcn = 0;//默认客户端为零
gcn = gac(UkeyInfo.ToCharArray(), ref AllowClient);
return gcn;
}
public void Dispose()
{ }
}
这两段是基本的注册外部DLL文件的步骤
程序里真正使用如下
string DMText;//密文
int UKClientNumber;//接受UK返回值
JBCUK UK=new JBCUkey(Server.MapPath("bin/JBCUkey.dll")); 说明一下 这个DLL已经被我添加到Bin文件夹下
UKResult = UK.GetClientNumber(DMText, ref UKClientNumber);第二点 就是 IIS配置的问题 这个问题 我真的是头大..实在搞不定 园子里有懂的兄弟没 。。 指点一下 。。
顶者都有分..等问题圆满解决 有需要这种加密方式的兄弟 可以找我要源码..包括那个delphi写的动态库..以及监控程序 统统提供源码(鄙人开源)
真没有人搞过这个问题吗
也许是那个DLL的问题 我用regsvr32.exe去注册这个DLL 一切正常 只是在注册完毕后 马上弹出一个内存不足的错误
我用ghost就出过好多问题