Лицензирование программы
Цитата: Дмитрий от 30.09.2023, 22:11Добрый день!
Хотел попросить у Вас подсказки. Пишу программу под винду, хотелось бы реализовать систему ключей продукта (разделение на pro и standart), но не имею не малейшего представления как это сделать. В интернете видел способ через специальный генератор (по apiшке), но он платный, плюс мне показался крайне костыльным и неудобным.
Может кто-то знает как это можно было бы реализовать без больших затрат и БДСМ с кодом.
Заранее спасибо.P.S. Желательно делать это без системы аккаунтов. Чтоб была привязка к железу.
P.S.S Я прошу от Вас идею реализации, сам код, понятно, писать никто не будет.
Добрый день!
Хотел попросить у Вас подсказки. Пишу программу под винду, хотелось бы реализовать систему ключей продукта (разделение на pro и standart), но не имею не малейшего представления как это сделать. В интернете видел способ через специальный генератор (по apiшке), но он платный, плюс мне показался крайне костыльным и неудобным.
Может кто-то знает как это можно было бы реализовать без больших затрат и БДСМ с кодом.
Заранее спасибо.
P.S. Желательно делать это без системы аккаунтов. Чтоб была привязка к железу.
P.S.S Я прошу от Вас идею реализации, сам код, понятно, писать никто не будет.
Цитата: Roman Anderson [anomal3] от 03.11.2023, 09:43Доброго времени суток.
Лови исходник
Он и протектор заодно. Чтобы код скрыть от глаз. Лицензировать программу можно по HWID (по железу)
По файлу лицензии.
По Флешке, чтобы флешка была вставлена.
Я думаю по исходникам можно взять то что нужно..
А если делать самому, то просто закомментируй функционал который для 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; } }Надеюсь Вам это поможет))
[MNotice]Если исходники есть на github, то лучше давать ссылку именно на github
Правила форума[/MNotice]
Доброго времени суток.
Лови исходник
Он и протектор заодно. Чтобы код скрыть от глаз. Лицензировать программу можно по HWID (по железу)
По файлу лицензии.
По Флешке, чтобы флешка была вставлена.
Я думаю по исходникам можно взять то что нужно..
А если делать самому, то просто закомментируй функционал который для 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] от 08.11.2023, 10:06Модератор ау. В правила посмотреть нужно, прежде чем в любой не понятной ситуации ими тыкать. Я Уважительно отношусь ко всем, правила соблюдаю, и нет ниодного пункта которого я нарушил. Я скинул ссылку прямую на исходный код программы. Там нет ни рекламы, ничего, я с этого ничего не получаю, нет не имени ни фамилии не никнейма. Но почему то нельзяяя. Человеку помочь хочешь а тут пресекают на корню. И пишут. "Я Крутой модератор, наделённый силою Хачатура пресекаю такое ... ая-яй Исходники только Гитхаб."
Будь человеком в первую очередь. Напиши мне коммент в личку, обоснуй своё решение, почему так. А лучше будь человеком, не понравилось, сделай так как считаешь нужным, скопируй код себе на гитхаб, и замени ссылку (кто-то из модеров тут есть человечный, так и делает, только вот имени не знаю) нам простым смертАм так незя, это же нарушает пункт правил.
Я никого не оскорбляю, а высказываю Аргументированное собственное мнение, потому что имею. ИМХО.
Модератор ау. В правила посмотреть нужно, прежде чем в любой не понятной ситуации ими тыкать. Я Уважительно отношусь ко всем, правила соблюдаю, и нет ниодного пункта которого я нарушил. Я скинул ссылку прямую на исходный код программы. Там нет ни рекламы, ничего, я с этого ничего не получаю, нет не имени ни фамилии не никнейма. Но почему то нельзяяя. Человеку помочь хочешь а тут пресекают на корню. И пишут. "Я Крутой модератор, наделённый силою Хачатура пресекаю такое ... ая-яй Исходники только Гитхаб."
Будь человеком в первую очередь. Напиши мне коммент в личку, обоснуй своё решение, почему так. А лучше будь человеком, не понравилось, сделай так как считаешь нужным, скопируй код себе на гитхаб, и замени ссылку (кто-то из модеров тут есть человечный, так и делает, только вот имени не знаю) нам простым смертАм так незя, это же нарушает пункт правил.
Я никого не оскорбляю, а высказываю Аргументированное собственное мнение, потому что имею. ИМХО.
Цитата: Сергей от 08.11.2023, 10:44Roman Anderson [anomal3], к вопросам, связанным с безопасностью и защитой, мы относимся очень строго. Поэтому ссылка на Яндекс Диск была удалена.
Такие вещи, как обфускаторы, и прочие средства защиты должны иметь свой репозиторий или официальный сайт, чтобы человек видел, что за код он берёт и проверял его в первую очередь.
Копировать ваш код к себе в GitHub считаю неуместным, потому что это ваш код, а не модератора.
Roman Anderson [anomal3], к вопросам, связанным с безопасностью и защитой, мы относимся очень строго. Поэтому ссылка на Яндекс Диск была удалена.
Такие вещи, как обфускаторы, и прочие средства защиты должны иметь свой репозиторий или официальный сайт, чтобы человек видел, что за код он берёт и проверял его в первую очередь.
Копировать ваш код к себе в GitHub считаю неуместным, потому что это ваш код, а не модератора.
