Защита Модулей, Драйверов, Плагинов

Стартовая страница Форумы Разработка и интеграция Защита Модулей, Драйверов, Плагинов

Просмотр 15 сообщений - с 1 по 15 (из 26 всего)
  • Автор
    Сообщения
  • #33299
    manjey73
    Участник

    Интересуют куски кода для правильного определения папок хранения CompCode.txt
    Доступа к этим папкам
    Как правильно получать Local компьютера
    Как правильно выводить в логи Модуля или др.
    Как правильно выводить в Журнал сервера информацию.

    p.s. а то в бесплатных некоторых вещей нет, а пытаться разобраться в коде после обфускации как-то тяжко, чтобы понять принципы 🙂

    на модуль перенес свой принцип защиты, но как-то кривовато это все работает.

    #33301
    Mikhail
    Модератор

    Доступ к папкам, ссылка. Файл CompCode.txt находится в директории журналов. Его туда записывает какой-либо из платных модулей.

    Получить выбранную локаль можно с помощью статического класса Locale.
    Вывод в журнал приложения, ссылка. Некоторые модули создают свои журналы, если они много пишут логов.

    #33302
    manjey73
    Участник

    Locale.isRussian по определению локали?

    Вот доступа к AppDirs я и не могу получить правильно, не пойму как его объявить.
    Сделал через другой подход

    serverContext.AppDirs.LogDir — но ведь как-то можно правильнее получить этот AppDirs?

    В драйвере не помню таких ухищрений.

    #33303
    manjey73
    Участник

    Вот пример, как сделать подобную запись ?

    2024-07-03 16:53:10 [LAPTOP-J1GTEM7T][LAPTOP-J1GTEM7T$][ERR] Модуль ModAutoControl: Проверка регистрации ModAutoControl: Регистрационный ключ пуст.

    У меня просто получается вывести одну строку, без даты, времени и так далее.
    Пример брал из OpenModule какого-то.

    moduleLog.WriteBreak(); понятно, выводит -----------------------

    А вот как формировать строки в том виде пока не разобрался.

    #33311
    manjey73
    Участник

    Есть класс ModXXXLogic наследник ModuleLogic

    Что надо сделать, чтобы в своем internal class ХХХХ получить доступ к

    moduleLog.WriteAction
    Log.WriteLine

    и так далее ??

    #33317
    Mikhail
    Модератор

    В модуле ServerContext.AppDirs — всё верно.

    > Вот пример, как сделать подобную запись?
    > moduleLog.WriteAction
    > Log.WriteLine

    Посмотрите ModDiffCalculatorLogic.cs

    #33343
    manjey73
    Участник

    Вероятно мой пост про наследников останется без ответа, раз не я последний в теме 🙂

    #33361
    manjey73
    Участник

    Например я использую такое чтение в массив байт

    byte[] npere = ScadaUtils.HexToBytes(keyString, true);

    В случае если длина ключа не кратна байтам и имеет пропуск одного полубайта, то есть запись вида FFF вместо FFFF то данная команда выдаст null в массив байт.

    Это так задумано, или косяк в реализации функции ?
    Потому что такая комбинация ScadaUtils.HexToBytes(keyString, true, true);

    Приводит к другому результату и модуль падает с исключением. Хотя еще не проверял, возможно он падает в исключение несколько дальше…

    #33365
    Mikhail
    Модератор

    Вероятно мой пост про наследников останется без ответа, раз не я последний в теме

    Какой?

    Это так задумано, или косяк в реализации функции ?

    public static byte[] HexToBytes(string s, bool skipWhiteSpace = false, bool throwOnFail = false)
    Так задумано. Параметр throwOnFail по умолчанию равен false.

    #33368
    manjey73
    Участник

    Есть класс ModXXXLogic наследник ModuleLogic

    Что надо сделать, чтобы в своем internal class Class1 получить доступ к

    moduleLog.WriteAction
    Log.WriteLine

    При этом мне еще нужен Class2 который будет наследником от Class1 — и вот тут выползает ошибка, типа Class2 не может определить откуда поступают данные, от ModuleLogic или от Class1, хотя и близко вроде не имеет отношения к ModuleLogic

    Я хочу в лог печатать из собственного класса, то есть использовать modulLog и так далее из своего кода а не лезть в часть ModXXXLogic

    #33371
    JurasskPark
    Участник

    Вы про это?

    
    private readonly ILog moduleLog;   // the log
    
    moduleLog = new LogFile(LogFormat.Simple)
    {
    FileName = Path.Combine(serverContext.AppDirs.LogDir, ModuleUtils.ModuleCode + ".log"),
    CapacityMB = serverContext.AppConfig.GeneralOptions.MaxLogSize
    };
    
    // start
    moduleLog.WriteBreak();
    moduleLog.WriteAction(ServerPhrases.StartModule, Code, Version);
    
    // stop
    moduleLog.WriteAction(ServerPhrases.StopModule, Code);
    moduleLog.WriteBreak();
    
    #33374
    manjey73
    Участник

    да, я про эти методы вывода логов в журналы Сервера и модуля, но чтобы я их мог использовать в стороннем классе, а не пинать из своего класса строки в ModXXXLogic и пытаться их потом через обходные пути вывести.
    То есть как можно использовать методы записи в журнал не из самого ModXXXLogic.

    У меня не получается. Или я не понимаю, как это сделать и возможно ли?

    #33375
    JurasskPark
    Участник

    У вы подключили библиотеку ScadaCommon.Log.dll
    Прописали using Scada.Log;
    Вызываете из своей библиотеки и он валится с ошибкой?

    #33376
    manjey73
    Участник

    а что, достаточно подключить библиотеку, чтобы получить доступ к выводу лога?
    Библиотека то подключена к проекту ессно, но как получить к данному методу доступ из своего класса? и чтобы в логе было все напечатано?

    #33377
    manjey73
    Участник

    мда, кажется мы говорим о разных вещах…
    Ждем Михаила 🙂

    Еще раз, мне нужен доступ к этим методам не из ModXXXLogic, который является наследником ModuleLogic а из собственного класса internal

    • Этот ответ был изменен 1 неделя назад от manjey73.
Просмотр 15 сообщений - с 1 по 15 (из 26 всего)
  • Вы должны авторизироваться для ответа в этой теме.