在VC+中创建程序的有限使用版本+; 我们公司帮助客户软件从其他语言迁移到C++。我们为它们提供了C++源代码以及头文件和编译库,以支持运行时支持功能。我们对迁移和运行时都收费。最近,一位潜在客户要求迁移他们拥有的许多系统中的一个。该系统包含7个程序,我们希望限制运行时间,以便只有这7个程序可以访问它。我们可以通过在对象库中放置加密的过期日期来限制运行时间,但是,由于我们必须为转换后的程序提供源代码,我们很难找到一种方法来限制对特定程序集的访问。显然,我们在源代码中输入的用于识别程序的任何内容都可以复制到任何其他程序中,因此唯一的希望似乎是让运行时库发现程序的某些特征集,然后根据嵌入在运行时库中的一组特征对其进行验证。据我所知,C++的反射能力很小(RTTI是我能找到的),所以我想问一下是否有人遇到过类似的问题,找到了解决的办法。提前感谢您的建议

在VC+中创建程序的有限使用版本+; 我们公司帮助客户软件从其他语言迁移到C++。我们为它们提供了C++源代码以及头文件和编译库,以支持运行时支持功能。我们对迁移和运行时都收费。最近,一位潜在客户要求迁移他们拥有的许多系统中的一个。该系统包含7个程序,我们希望限制运行时间,以便只有这7个程序可以访问它。我们可以通过在对象库中放置加密的过期日期来限制运行时间,但是,由于我们必须为转换后的程序提供源代码,我们很难找到一种方法来限制对特定程序集的访问。显然,我们在源代码中输入的用于识别程序的任何内容都可以复制到任何其他程序中,因此唯一的希望似乎是让运行时库发现程序的某些特征集,然后根据嵌入在运行时库中的一组特征对其进行验证。据我所知,C++的反射能力很小(RTTI是我能找到的),所以我想问一下是否有人遇到过类似的问题,找到了解决的办法。提前感谢您的建议,c++,programming-languages,C++,Programming Languages,根据这两个答案,似乎需要进行一些澄清。我们完全希望客户机修改源代码,通常我们为他们提供不受限制的运行库版本。此特定客户端请求的版本仅限于单个系统,并且很乐意进入一个许可证,该许可证将运行时库的使用限制到该系统。因此,对法律问题的讨论是不相关的。这是一个技术问题——如果许可证仅限于一个系统,并且客户机拥有调用程序的源,但没有运行时,那么是否有办法将对运行时的访问限制为包含该系统的一组程序,从而强制执行许可证的条款 如果他们不应该对程序做进一步的更改,你为什么要给他们源代码?如果他们希望继续更改程序

根据这两个答案,似乎需要进行一些澄清。我们完全希望客户机修改源代码,通常我们为他们提供不受限制的运行库版本。此特定客户端请求的版本仅限于单个系统,并且很乐意进入一个许可证,该许可证将运行时库的使用限制到该系统。因此,对法律问题的讨论是不相关的。这是一个技术问题——如果许可证仅限于一个系统,并且客户机拥有调用程序的源,但没有运行时,那么是否有办法将对运行时的访问限制为包含该系统的一组程序,从而强制执行许可证的条款

如果他们不应该对程序做进一步的更改,你为什么要给他们源代码?如果他们希望继续更改程序(即维护),谁来决定更改是否构成不允许使用库的新程序

没有任何技术方法可以强制实施这种许可模式

可能有一种合法的方法——在加载/启用库的代码中,写一条注释“这是一种拷贝保护措施”。然后DMCA禁止他们将该代码包含到其他程序中(在美国)。但伊纳尔,我认为DMCA无论如何都是无效的


咨询律师,了解您在合同/销售清单下拥有哪些限制其使用的权利。

如果他们不应该对程序进行进一步更改,您为什么要给他们源代码?如果他们希望继续更改程序(即维护),谁来决定更改是否构成不允许使用库的新程序

没有任何技术方法可以强制实施这种许可模式

可能有一种合法的方法——在加载/启用库的代码中,写一条注释“这是一种拷贝保护措施”。然后DMCA禁止他们将该代码包含到其他程序中(在美国)。但伊纳尔,我认为DMCA无论如何都是无效的


咨询律师,了解您在合同/销售清单下有哪些权利限制其使用。

我能想到的最明显的答案是获取呼叫过程的名称和/或路径——只需将此名称与支持库中的7个“允许”程序进行比较。当然,他们可以创建一个同名的新流程,但他们可能不知道该怎么做

另一个级别可以是进一步将可执行文件大小与该应用程序的已知大小进行比较。(您可能希望在预期大小周围允许一个相当大的范围,以防他们更改源代码和/或使用不同的选项编译。)

另一种想法是,你可以尝试向应用程序的资源中添加一些看似友好的字符串。(“Copyright 2011~Your Corporation Name~”)——然后,您可以扫描父可执行文件中的魔法字符串。如果他们创建了一个新产品,他们可能不会考虑创建这个资源


最后,正如Ben已经指出的,如果您给他们提供源代码,那么这个问题可能没有万无一失的解决方案。(正如他所说,“修改过的”代码在什么时候会变成一个新的应用程序?)您可能能做的最好的事情是添加足够小的障碍,这样他们就不会费心在另一个产品中使用该库了。这可能取决于他们的决心和/或运气。

我能想到的最明显的答案是获取调用过程的名称和/或路径——只需将此名称与支持库中的7个“允许”程序进行比较。当然,他们可以创建一个同名的新流程,但他们可能不知道该怎么做

另一个级别可以是进一步将可执行文件大小与该应用程序的已知大小进行比较。(您可能希望在预期大小周围允许一个相当大的范围,以防他们更改源代码和/或使用不同的选项编译。)

另一种想法是,你可以尝试向应用程序的资源中添加一些看似友好的字符串。(“Copyright 2011~Your Corporation Name~”)——然后,您可以扫描父可执行文件中的魔法字符串。如果他们创建了一个新产品,他们可能不会考虑创建这个资源

最后,正如Ben已经指出的,如果您给他们提供源代码,那么这个问题可能没有万无一失的解决方案。(正如他所说,“修改过的”代码在什么时候会变成一个新的应用程序?)您可能能做的最好的事情是添加足够小的障碍,这样他们就不会费心在另一个产品中使用该库了。