Вы должны войти, чтобы создавать сообщения и темы.

Лицензирование программы

Добрый день!
Хотел попросить у Вас подсказки. Пишу программу под винду, хотелось бы реализовать систему ключей продукта (разделение на pro и standart), но не имею не малейшего представления как это сделать. В интернете видел способ через специальный генератор (по apiшке), но он платный, плюс мне показался крайне костыльным и неудобным.
Может кто-то знает как это можно было бы реализовать без больших затрат и БДСМ с кодом.
Заранее спасибо.

P.S. Желательно делать это без системы аккаунтов. Чтоб была привязка к железу.
P.S.S Я прошу от Вас идею реализации, сам код, понятно, писать никто не будет.

Доброго времени суток.
Лови исходник
Он и протектор заодно. Чтобы код скрыть от глаз. Лицензировать программу можно по HWID (по железу)
По файлу лицензии.
По Флешке, чтобы флешка была вставлена. 
Я думаю по исходникам можно взять то что нужно..

ScreenShoot

А если делать самому, то просто закомментируй функционал который для Standard. А если человек захотел Pro то просто на лету перекомпилируй код, раскомментируй во время выполнения и всё будет отлично.

Условно для Стандарта

CloseProgram += (_, e) => SaveData(mydata);

void SaveData(BaseData data)
{
     //Это для стандарта
     //Machine.Save(data)
}

//Для Pro просто раскоментируй строку в рантайме 

Для "динамической компиляции" вот Вам видео от Дмитрия Нестерука
https://youtu.be/SF_JTs30xEY?t=1221
Код который он использует в видео вот

 

internal class InProcessCompiler
{
    internal Assembly Compile(string sourceCode, string compilerVersion = "4.0")
    {
        CompilerParameters ps = PrepareCompilerParameters();

        var po = new Dictionary<string, string>
        {
            { "CompilerVersion", compilerVersion }
        };

        var p = new CSharpCodeProvider(po);
        var result = p.CompileAssemblyFromSource(ps, new[] { sourceCode });

        if(result.Errors.HasErrors)
        {
            var sb = new StringBuilder();
            foreach( var e in result.Errors )
                sb.AppendLine(e.ToString());
            throw new Exception(sb.ToString());
        }

        return result.CompiledAssembly;
    }

    internal Type CompileAndGetType(string sourceCode, string compilerVersion = "4.0")
    {
        var ass = Compile(sourceCode, compilerVersion);
        var types = ass.GetTypes();
        if (types == null || types.Length == 0)
            throw new Exception("Compiled Assembly produced no types");
        else if (types.Length != 1)
            throw new Exception("Compiled Assembly has more than one type");
        else return types[0];
    }

    internal object CompileAndInstance(string sourceCode, string compilerVersion = "4.0")
    {
        var mainType = CompileAndGetType(sourceCode, compilerVersion);
        return Activator.CreateInstance(mainType);
    }


    private CompilerParameters PrepareCompilerParameters()
    {
        var ps = new CompilerParameters
        {
            GenerateInMemory = true,
            GenerateExecutable = true
        };

        foreach(var reference in AppDomain.CurrentDomain.GetAssemblies())
        {
            try
            {
                ps.ReferencedAssemblies.Add(reference.Location);
            }

            catch(Exception ex)
            {
                string s = "Cannot add assembly " + reference.FullName+ "'";
                Debug.WriteLine(s);
            }
        }

        return ps;
    }
}

Надеюсь Вам это поможет))


Комментарий модератора:
Если исходники есть на github, то лучше давать ссылку именно на github
Правила форума

Лайкнул Латук
Латук

Модератор ау. В правила посмотреть нужно, прежде чем в любой не понятной ситуации ими тыкать. Я Уважительно отношусь ко всем, правила соблюдаю, и нет ниодного пункта которого я нарушил. Я скинул ссылку прямую на исходный код программы. Там нет ни рекламы, ничего, я с этого ничего не получаю, нет не имени ни фамилии не никнейма. Но почему то нельзяяя. Человеку помочь хочешь а тут пресекают на корню. И пишут. "Я Крутой модератор, наделённый силою Хачатура пресекаю такое ... ая-яй Исходники только Гитхаб." 

Будь человеком в первую очередь. Напиши мне коммент в личку, обоснуй своё решение, почему так. А лучше будь человеком, не понравилось, сделай так как считаешь нужным, скопируй код себе на гитхаб, и замени ссылку (кто-то из модеров тут есть человечный, так и делает, только вот имени не знаю) нам простым смертАм так незя, это же нарушает пункт правил.

Я никого не оскорбляю, а высказываю Аргументированное собственное мнение, потому что имею. ИМХО.

Roman Anderson [anomal3], к вопросам, связанным с безопасностью и защитой, мы относимся очень строго. Поэтому ссылка на Яндекс Диск была удалена.
Такие вещи, как обфускаторы, и прочие средства защиты должны иметь свой репозиторий или официальный сайт, чтобы человек видел, что за код он берёт и проверял его в первую очередь.
Копировать ваш код к себе в GitHub считаю неуместным, потому что это ваш код, а не модератора.