我想要达到的目的就像我们从网上下载的有些软件一样,比如说开始我可以给他一个licence码,根据这个licence码,用户可以试用1个月,到期后,用户可以购买新的licence。但我现在不太清楚那些人是怎么实现的,或者是不是有一些通用的规范?
____________________________________________________________________________________________
license是做版权声明等的吧,跟防盗版没关系
参照GPL什么的写吧.readme文件而已________________________________________________________________________________________
取一个唯一标识,比如MAC地址,生成一个标识符用于你的系统标识
用户给你这个用户标识,你就根据这个标识给他一个序列号,应用程序检测这个序列号的正确性
---------------------------------------------------------------------------------------------
举个简单例子
设置一个ini文件内有ip限制,时间限制等你自己需要的设置然后使用md5加密整个ini文件,将加密后的32个字符(签名)添加到文件的最后,程序运行时,首先判断签名是否和license文件相符。
然后将其它选项读入内存,定时判断(比如运行时间限制等)
----------------------------------------------------------------------------------------------------
解决方法有
1.过期问题:要求程序到你的服务器去时间,当然,这样交互,可能是被客户禁止的。
2.防止客户重装系统的问题:自己编写一个虚拟机,读取主板序列号,这样,别说他重新安装了,就算他换了硬盘,也别指望再本机器上使用超过30天。但要实现这条,必须和你的服务器交互,把对方的序列号和注册时间发送到你的服务器中保存起来,每次程序启动的时候,再从你的服务器中读取时间信息。
但,读取主板序列号,并发送消息似乎有法律纠纷问题,呵呵
------------------------------------------------------------------------------------------------------
读硬盘序列号,对序列号编程序,是很好的,我以前用PB做过,现在忘记了,你到天极网去收索加密,有现成的例子的.
-----------------------------------------------------------------------------------------------------
用加密锁,都提供软件试用限制功能,还可以让你的用户觉得你的软件是真正的软件产品。
-----------------------------------------------------------------------------------------------------
每一个软件的完成都是编程人员心血的结晶,因而,当盗版的黑手伸向你的劳动成果时,怎不令人可怜、可恨!逼得我们只好拿起武器,捍卫自己的劳动成果。以下的两段小程序,可以防止他人非法使用自己的软件。(让我们共同反对盗版!)
程序一:放于主程序的开头,用于检查文件“cjgl.dat”是否存在,若不存在,便退出,程序不能继续执行。需要注意的是文件“cjgl.dat” 不能与主程序放于同一目录。这里放在win.com所在目录,选win.com主要是因为win.com必定存在。程序段如下:
path1=fullpath(″win.com″,1)
&&检查文件win.com所在目录
len=len(path1)-7
fil=left(path1,len)+″cjgl.dat″
if !file(fil)
&& 如文件cjgl.dat不存在提出警告
mes=messagebox(″要用软件,请与作者联系!″,64,″重要信息″)
quit
endif
程序二:用于软件的注册,此程序运行结果即将软盘上的“cjgl.dat”文件拷贝至win.com所在目录下。cjgl.dat文件内容任意。程序如下:
set talk off
path1=fullpath(″win.com″,1)
len=len(path1)-7
fil=left(path1,len)+″cjgl.dat″
if file(fil)
&& 先判断cjgl.dat是否存在指定目录下
=messagebox(″学生成绩管理系统已经注册!″,64,″提示″) &&如存在,说明已注册过
else &&如不存在,拷贝程序
copy file cjgl.dat to &fil
=messagebox(″注册完毕!″,64,″提示″)
endif
quit
若加上时间限制及内存变量,可让程序限时试用。
-----------------------------------------------------------------------------------------------------
可以使用的方式很多,例如在注册表中写个记号,也可以使用一个特殊的文件,这个文件是跟机器的硬件信息有关的,记载了用户的使用信息,且是不允许用户覆盖的(如果用户用以前生成的文件覆盖则可以判断)
-------------------------------------------------------------------------------------------------------
每次启动纪录一个时间date[0]...date[n].
第n+1次启动时date[n+1].
if(date[n+1] <= date[n])
exit(-1);
if((date[n+1]-date[0])>30天)
exit(-2);
write date[n+1] to 纪录
存放时间可以为注册表或存放在system32/下,注意保密。程序可以在第一次运行时生成键值或文件。
以上方法时间精确到秒效果最好。
------------------------------------------------------------------------------------------------------
答3:
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconlicensingcomponentscontrols.htm
启用您的组件的授权
将 LicenseProviderAttribute 应用到类。
在构造函数中调用 LicenseManager.Validate 或 LicenseManager.IsValid。
在类的终结器中或在调用终结器之前对任何已授予的许可证调用 Dispose。
下面的示例显示了一个 Windows 窗体控件实现授权的简单情况。
[C#]
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class MyControl : Control {
private License license = null;
public MyControl () {
license = LicenseManager.Validate(typeof(MyControl), this);
}
protected override void Dispose(bool disposing) {
if (disposing) {
if (license != null) {
license.Dispose();
license = null;
}
}
base.Dispose(disposing);
}
~MyControl() {
Dispose();
}
}
[Visual Basic]
Imports System
Imports System.ComponentModel
Imports System.Web.UI
<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class MyControl
Inherits Control
Private license As License
Public Sub New()
license = LicenseManager.Validate(GetType(MyControl), Me)
End Sub
Public Overloads Overrides Sub Dispose()
If Not (license Is Nothing) Then
license.Dispose()
license = Nothing
End If
End Sub
End Class
下面的示例显示了一个 ASP.NET 服务器控件实现授权的简单情况。
[C#]
using System;
using System.ComponentModel;
using System.Web.UI;
public class MyControl : Control {
private License license = null;
public MyControl () {
license = LicenseManager.Validate(typeof(MyControl), this);
}
public override void Dispose() {
if (license != null) {
license.Dispose();
license = null;
}
base.Dispose();
}
}
[Visual Basic]
Imports System
Imports System.ComponentModel
Imports System.Web.UI
<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class MyControl
Inherits Control
Private license As License
Public Sub New()
license = LicenseManager.Validate(GetType(MyControl), Me)
End Sub
Public Overrides Sub Dispose()
If Not (license Is Nothing) Then
license.Dispose()
license = Nothing
End If
End Sub
End Class
此处的示例使用了内置的许可证提供程序类 LicFileLicenseProvider,它使用文本许可证文件并模仿 COM (ActiveX) 授权的行为。更加复杂的授权情况(例如调用 XML Web services 来限制组件实例的数目)需要多种不同的许可证提供程序。
在 Windows 窗体快速入门中的 Building Applications(生成应用程序)-> Creating Controls(创建控件)-> Licensing Controls(为控件授权)下提供了一个授权示例。
请参见
开发组件
______________________________________________________________________________________________
____________________________________________________________________________________________
license是做版权声明等的吧,跟防盗版没关系
参照GPL什么的写吧.readme文件而已________________________________________________________________________________________
取一个唯一标识,比如MAC地址,生成一个标识符用于你的系统标识
用户给你这个用户标识,你就根据这个标识给他一个序列号,应用程序检测这个序列号的正确性
---------------------------------------------------------------------------------------------
举个简单例子
设置一个ini文件内有ip限制,时间限制等你自己需要的设置然后使用md5加密整个ini文件,将加密后的32个字符(签名)添加到文件的最后,程序运行时,首先判断签名是否和license文件相符。
然后将其它选项读入内存,定时判断(比如运行时间限制等)
----------------------------------------------------------------------------------------------------
解决方法有
1.过期问题:要求程序到你的服务器去时间,当然,这样交互,可能是被客户禁止的。
2.防止客户重装系统的问题:自己编写一个虚拟机,读取主板序列号,这样,别说他重新安装了,就算他换了硬盘,也别指望再本机器上使用超过30天。但要实现这条,必须和你的服务器交互,把对方的序列号和注册时间发送到你的服务器中保存起来,每次程序启动的时候,再从你的服务器中读取时间信息。
但,读取主板序列号,并发送消息似乎有法律纠纷问题,呵呵
------------------------------------------------------------------------------------------------------
读硬盘序列号,对序列号编程序,是很好的,我以前用PB做过,现在忘记了,你到天极网去收索加密,有现成的例子的.
-----------------------------------------------------------------------------------------------------
用加密锁,都提供软件试用限制功能,还可以让你的用户觉得你的软件是真正的软件产品。
-----------------------------------------------------------------------------------------------------
每一个软件的完成都是编程人员心血的结晶,因而,当盗版的黑手伸向你的劳动成果时,怎不令人可怜、可恨!逼得我们只好拿起武器,捍卫自己的劳动成果。以下的两段小程序,可以防止他人非法使用自己的软件。(让我们共同反对盗版!)
程序一:放于主程序的开头,用于检查文件“cjgl.dat”是否存在,若不存在,便退出,程序不能继续执行。需要注意的是文件“cjgl.dat” 不能与主程序放于同一目录。这里放在win.com所在目录,选win.com主要是因为win.com必定存在。程序段如下:
path1=fullpath(″win.com″,1)
&&检查文件win.com所在目录
len=len(path1)-7
fil=left(path1,len)+″cjgl.dat″
if !file(fil)
&& 如文件cjgl.dat不存在提出警告
mes=messagebox(″要用软件,请与作者联系!″,64,″重要信息″)
quit
endif
程序二:用于软件的注册,此程序运行结果即将软盘上的“cjgl.dat”文件拷贝至win.com所在目录下。cjgl.dat文件内容任意。程序如下:
set talk off
path1=fullpath(″win.com″,1)
len=len(path1)-7
fil=left(path1,len)+″cjgl.dat″
if file(fil)
&& 先判断cjgl.dat是否存在指定目录下
=messagebox(″学生成绩管理系统已经注册!″,64,″提示″) &&如存在,说明已注册过
else &&如不存在,拷贝程序
copy file cjgl.dat to &fil
=messagebox(″注册完毕!″,64,″提示″)
endif
quit
若加上时间限制及内存变量,可让程序限时试用。
-----------------------------------------------------------------------------------------------------
可以使用的方式很多,例如在注册表中写个记号,也可以使用一个特殊的文件,这个文件是跟机器的硬件信息有关的,记载了用户的使用信息,且是不允许用户覆盖的(如果用户用以前生成的文件覆盖则可以判断)
-------------------------------------------------------------------------------------------------------
每次启动纪录一个时间date[0]...date[n].
第n+1次启动时date[n+1].
if(date[n+1] <= date[n])
exit(-1);
if((date[n+1]-date[0])>30天)
exit(-2);
write date[n+1] to 纪录
存放时间可以为注册表或存放在system32/下,注意保密。程序可以在第一次运行时生成键值或文件。
以上方法时间精确到秒效果最好。
------------------------------------------------------------------------------------------------------
答3:
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconlicensingcomponentscontrols.htm
启用您的组件的授权
将 LicenseProviderAttribute 应用到类。
在构造函数中调用 LicenseManager.Validate 或 LicenseManager.IsValid。
在类的终结器中或在调用终结器之前对任何已授予的许可证调用 Dispose。
下面的示例显示了一个 Windows 窗体控件实现授权的简单情况。
[C#]
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class MyControl : Control {
private License license = null;
public MyControl () {
license = LicenseManager.Validate(typeof(MyControl), this);
}
protected override void Dispose(bool disposing) {
if (disposing) {
if (license != null) {
license.Dispose();
license = null;
}
}
base.Dispose(disposing);
}
~MyControl() {
Dispose();
}
}
[Visual Basic]
Imports System
Imports System.ComponentModel
Imports System.Web.UI
<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class MyControl
Inherits Control
Private license As License
Public Sub New()
license = LicenseManager.Validate(GetType(MyControl), Me)
End Sub
Public Overloads Overrides Sub Dispose()
If Not (license Is Nothing) Then
license.Dispose()
license = Nothing
End If
End Sub
End Class
下面的示例显示了一个 ASP.NET 服务器控件实现授权的简单情况。
[C#]
using System;
using System.ComponentModel;
using System.Web.UI;
public class MyControl : Control {
private License license = null;
public MyControl () {
license = LicenseManager.Validate(typeof(MyControl), this);
}
public override void Dispose() {
if (license != null) {
license.Dispose();
license = null;
}
base.Dispose();
}
}
[Visual Basic]
Imports System
Imports System.ComponentModel
Imports System.Web.UI
<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class MyControl
Inherits Control
Private license As License
Public Sub New()
license = LicenseManager.Validate(GetType(MyControl), Me)
End Sub
Public Overrides Sub Dispose()
If Not (license Is Nothing) Then
license.Dispose()
license = Nothing
End If
End Sub
End Class
此处的示例使用了内置的许可证提供程序类 LicFileLicenseProvider,它使用文本许可证文件并模仿 COM (ActiveX) 授权的行为。更加复杂的授权情况(例如调用 XML Web services 来限制组件实例的数目)需要多种不同的许可证提供程序。
在 Windows 窗体快速入门中的 Building Applications(生成应用程序)-> Creating Controls(创建控件)-> Licensing Controls(为控件授权)下提供了一个授权示例。
请参见
开发组件
______________________________________________________________________________________________