如何唯一地识别计算机程序?

3
我有一个比较通用的问题,但是如果你有任何在C#中实现这个功能的建议,我也会非常感激。 我正在使用C#制作一个基于Windows的PC程序,这个程序的想法是,在运行该程序的计算机连接到互联网时,向某个服务器上的数据库发送少量数据。许多人将使用这个PC程序,但我想知道哪个用户(哪个程序)发送了数据。因此,我会发布一个程序供人们下载和安装。该程序将向中央数据库发送一些数据(取决于用户在程序中所做的事情),我想知道其中的哪些程序发送了数据。这样我就可以看到程序的哪些功能被最广泛地使用,有些人主要使用一个或多个功能等等。
因此,问题是如何制作一个程序,但能够区分不同的“实例”?
有人有任何想法如何实现这一点吗?
非常感谢您提前的回答。
附言:我应该提到,我刚开始学习PC编程,因此请尽量让答案简单易懂,适合初学者。 :)

你可以使用他们的公共IP,或者添加一个会员系统并记录他们的用户名。 - jrummell
3个回答

9
我会在客户端上创建一个GUID并将其存储在某个设置中,然后将其与每个消息一起发送。
这可以存储在计算机的每个用户或全局设置中,因此您可以获得基于用户或计算机的保真度。
这样做的好处是您没有存储任何个人数据,因此不会违反隐私法。

@Kiley Naro:好的,显然GUID是这里首选的方式。但我有一个担忧:如果用户卸载软件或格式化计算机,然后重新安装应用程序,这将导致新的GUID,并且从那时起,数据库将把此用户视为新用户。我的想法正确吗?还是有什么方法可以解决这个问题?我能不能使用一些与用户计算机唯一相关的数据?有人提到了IP,尽管它不是静态的,但是否可行? - EEALNT
@user1015043 你的假设是正确的。你可以尝试将GUID存储在注册表中,在安装时检查该键是否存在。如果存在,向用户提供清除或保留的选项。此外,你也可以使用MAC地址,因为它对于每个网络适配器都是唯一的,但是如果网络适配器更改了怎么办(因为非集成网络适配器确实存在),这就需要你自己考虑了。 - Kiley Naro

2
你可以使用MAC地址和已登录的用户名(可能是哈希过的,以避免保留私人信息)的组合来唯一确定机器/用户组合。

2

无论你做什么,请确保在发送数据之前征得每个用户的许可,否则你可能会很快失去用户的好感。在安装程序中,考虑将Guid写入文件系统并在每次程序加载时读取该GUID。安装程序还可以提供一个选项,“发送匿名使用信息以改善客户体验”。如果他们取消勾选该框,则也记录下这一事实。


这里我有一个与之前帖子类似的问题。卸载或格式化计算机不会设置新的GUID,从而将同一用户呈现为新用户吗?您所说的将GUID写入文件系统是什么意思?将其写入磁盘上的某个文件中?通常用于此类事情的是什么类型的文件?可能不仅仅是普通的txt文件,对吧? - EEALNT
我不认为你会担心有人“冒充”另一台计算机(通过猜测不同计算机的GUID)。我可能会将其命名为“unique.prodkey”的隐藏文件(使用没有默认程序打开它的扩展名)。这样,大多数用户可能永远不会看到该文件,但如果他们确实看到了它,也不会有程序可以打开它。 - agent-j

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接