lanceg 发表于 2008-2-13 13:57:32

检查许可证的最佳方法? 时序问题

多亏了Keith的帮助,我写了一系列的ActiveX DLLs,我想把它们作为AutoCAD的附加应用程序发布。我想建立一种方法让每个dll检查一个许可程序的状态。我想我应该写一个VB6 EXE来处理许可问题,然后让每个DLL在启动时检查它。我创建了EXE作为一种“TSR ”,在后台全职运行,然后终止于AutoCAD。这种机制似乎工作得很好,但问题是启动EXE。我试过从一个MNL文件启动它,在调用特定的DLL之前从一个工具栏按钮启动它,从ACADDOC启动它——在每一种情况下它都干扰启动AutoCAD(它启动两个ACAD。前任和其他一些东西)。
我最近尝试使用SHELL从每个DLL内部启动EXE。我使用FindInstance检查,这样如果EXE已经在运行,DLL就不会启动第二个会话。除了一个问题——时间之外,这个方法似乎也很有效。我不能做典型的外壳等待,因为它们要求外壳程序在继续之前结束,而我的程序不能这样做。
The中有一个对话框,允许用户与之交互-它检查我的锁定机制,并确保应用程序处于试用期或已注册等。同样,这很好。
问题是EXE的锁定对话框与DLL的主(模态)对话框同时出现在屏幕上,即使外壳进程(我知道是异步的)在对话框应该出现之前就开始了。我描述的序列在IDE中工作得很好,但是在编译之后,对话框几乎同时出现。这样做的问题是,如果用户取消EXE对话框,它应该会阻止DLL的对话框出现!正如我所说的,它在IDE中可以工作,但在编译后就不行了。
到目前为止,我的最佳猜测是这是一个编组问题,因为EXE不在AutoCAD的进程中,但dll在。我应该尝试用另一个DLL来做EXE的工作吗?
有没有更好的方法来完成我想完成的事情?
**** Hidden Message *****

hendie 发表于 2008-2-14 03:37:27

好吧,这可能不是更好,但这是我们所用的,而且有效。我们的程序在AutoCAD中也无法运行(因为它需要与Acad 2000到2008兼容)。
我们使用的不是许可证exe,而是简单的文本文件~加密
程序启动时,会检查许可证文件是否存在,并验证其内容。如果一切正常,程序将以完整的moce运行。如果存在任何问题(例如,有人篡改了文件内容),则会恢复到演示模式<这是基本的,很简单,但在过去三年中一直运行良好

lanceg 发表于 2008-2-14 13:50:19

我想我要创建另一个ActiveX DLL来处理许可。它将由我的每个“程序DLL”调用,并设置为布尔函数。挑战在于找出一种方法,在每个AutoCAD会话中以某种全局可用的方式保存许可DLL的结果,这样我就不必每次运行程序DLL时都调用许可DLL。由于DLL的每个实例在完成后都会被销毁,因此我不知道如何将许可证DLL的结果从一个实例传递到另一个实例,除非使用文本文件或注册表项。
页: [1]
查看完整版本: 检查许可证的最佳方法? 时序问题