如何使单个系统(机器)的Windows应用程序
答
你不能做到这一点可靠。
你可以尝试一些简单的东西,比如在注册表中写一个魔术键或者在某处存储一个魔法文件,但是像Process Monitor这样的简单工具会向任何具有Google技能的人展示你的魔法标记。
您可以尝试删除当它被终止.exe文件,但如果用户进行复印时,他们执行你的文件之前,您再次松动。
你可以写一个根工具包,阻止系统启动了应用程序的两倍,但不是非常好,它可以检测并规避了。
您可以创建一个在线服务,而您的应用需求检查一次性许可来执行,但可以破解,你会得到一个时间牌弄得一塌糊涂保持跟踪。
但到最后,如果有人真的想要运行的应用程序超过一次,他们将弄清楚如何做到这一点。
你想要多少保护?
答
你所谈论的是一个单实例应用程序,可以启动,并没有其他的副本可以运行 - 单实例启动代码的基础是创建一个互斥体,如果另一个副本运行时,它会检查如果分配了互斥锁,如果它已经被释放并立即退出。看看这篇关于CodeProject的文章,它正是你想要的。
答
可以使用DPAPI调用的组合(ProtectedData
Class)将值推入注册表中以再次检查,或者在第一次运行时对值进行编码,并检查结果是否与您打算使用的机器匹配运行(如果没有则退出)。
参见DataProtectionScope.LocalMachine
。受保护数据的结果在每台机器上几乎总是不同,因此这可以作为特定机器检查。
答
您可以创建一个注册表项。如果该键存在中止执行。
据我所知,你希望每个用户只运行一次。我不认为这是可能的。用户可以拥有多台计算机或虚拟机设置,并且可以运行多次。你可以使用某种序列号,但这也是易碎的(关于序列号有很多问题,你可以看到它的优点和缺点) – Rox 2010-09-07 11:29:35
用户只有计算机,它只能在同一系统中运行,不能在其他系统中运行。 – abu 2010-09-07 11:31:23
简单:[写skynet](http://xkcd.com/534/)...只需要其中一个,* poof *没有更多的世界。 – 2010-09-07 11:36:09