2010-09-07 32 views
1

我想为桌面应用程序制作.exe,它只能在整个生活中使用一次。没有人可以运行它两次。如何使单个系统(机器)的Windows应用程序

+2

据我所知,你希望每个用户只运行一次。我不认为这是可能的。用户可以拥有多台计算机或虚拟机设置,并且可以运行多次。你可以使用某种序列号,但这也是易碎的(关于序列号有很多问题,你可以看到它的优点和缺点) – Rox 2010-09-07 11:29:35

+0

用户只有计算机,它只能在同一系统中运行,不能在其他系统中运行。 – abu 2010-09-07 11:31:23

+1

简单:[写skynet](http://xkcd.com/534/)...只需要其中一个,* poof *没有更多的世界。 – 2010-09-07 11:36:09

回答

5

你不能做到这一点可靠。

你可以尝试一些简单的东西,比如在注册表中写一个魔术键或者在某处存储一个魔法文件,但是像Process Monitor这样的简单工具会向任何具有Google技能的人展示你的魔法标记。

您可以尝试删除当它被终止.exe文件,但如果用户进行复印时,他们执行你的文件之前,您再次松动。

你可以写一个根工具包,阻止系统启动了应用程序的两倍,但不是非常好,它可以检测并规避了。

您可以创建一个在线服务,而您的应用需求检查一次性许可来执行,但可以破解,你会得到一个时间牌弄得一塌糊涂保持跟踪。

但到最后,如果有人真的想要运行的应用程序超过一次,他们将弄清楚如何做到这一点。

你想要多少保护?

1

当它退出时删除它自己吗?

+1

更好的是,删除一次完全加载。这几乎是我说的唯一方法。 – tdammers 2010-09-07 11:32:46

+0

在第一次运行之前无法复制exe文件,因此备份将始终可用? – Rox 2010-09-07 11:33:12

+0

这不是一个答案...投票下来......-我从我的 – t0mm13b 2010-09-07 11:35:16

0

你所谈论的是一个单实例应用程序,可以启动,并没有其他的副本可以运行 - 单实例启动代码的基础是创建一个互斥体,如果另一个副本运行时,它会检查如果分配了互斥锁,如果它已经被释放并立即退出。看看这篇关于CodeProject的文章,它正是你想要的。

+1

“一生只用过一次,没人能跑两次。” - 由此我明白,他不希望程序在第一次运行后再次启动。 – Rox 2010-09-07 11:36:35

+0

@Rox:这是使用系统分配的全局互斥锁的想法......一旦分配完毕,就是这样......没有其他副本可以运行...... – t0mm13b 2010-09-07 11:38:50

+1

“整个生活”中暗示这并不完全OP的意图是什么。 – 2010-09-07 11:39:30

0

可以使用DPAPI调用的组合(ProtectedData Class)将值推入注册表中以再次检查,或者在第一次运行时对值进行编码,并检查结果是否与您打算使用的机器匹配运行(如果没有则退出)。

参见DataProtectionScope.LocalMachine。受保护数据的结果在每台机器上几乎总是不同,因此这可以作为特定机器检查。

0

您可以创建一个注册表项。如果该键存在中止执行。

相关问题