0

我们使用的是前处理器指令,如 trail 和 license,所以我们有两个安装程序用于 trail 和 license。当用户想要从试用升级到许可时,他们必须卸载试用并安装许可,反之亦然。现在我们只想拥有一个安装程序,这意味着我们希望摆脱重新安装应用程序以获取许可的过程,并且只有一个为 Trail 和许可用户提供服务的安装程序。所以我的问题是基于一些许可文件,即 DAT文件,我们应该如何使用 C# 代码更改预处理代码 在用户升级或降级许可证后更改代码的替代方法是什么。如果许可证有任何变化,那么我们需要使用 Main 方法并重新加载会话和所有异常处理程序,引擎再次打开相应的模式。请建议如何为这种挑战编码。

 class Program
    {
        static void Main(string[] args)
        {
#if Trail
        SomeStaticClass.PropertyId = "10023";
        //trail based code
#elif LICENSED
            SomeStaticClass.PropertyId = "10024";
            //licensed code
#endif

            //register some events based on trail and Licensed
            //create session based on trail and Licensed
            //license check is happening after all the sessions and environments are created 

        }
    }

    public static class SomeStaticClass
    {
        public static string PropertyId { get; set; }
    }
4

1 回答 1

0

如果下载您的试用版为人们提供了许可版本的所有编译代码,那么有些人可能会尝试弄清楚您的许可测试是如何实施并破坏它。

相反,我会重构您的应用程序以创建相同接口的试用和许可实现。从试用工厂类或许可工厂创建。将所有许可类放在一个单独的程序集中,您的试用版不附带该程序集。

然后,您的 main 方法可以找到许可的程序集,加载它,并通过反射发现工厂类。

如果您真的只想发送一个安装程序,我会发送加密的许可程序集。然后您的注册过程可以传输和存储加密密钥,因此您的主要方法可以将程序集解密到内存中并加载它。如果没有加密密钥,该程序集将完全无用。

于 2021-09-30T01:21:39.243 回答