You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

Программы .NET

Примеры приводятся для файла программы .NET 8.0; для .NET Framework, .NET Core и .NET Standard детали (распечатанный stacktrace) могут отличаться, но выброшенные исключения имеют точно такие же типы.

Требуется hostpolicy

Признак:

При попытке запуске программы Project в консоли (для Windows) либо терминале (для Linux) выводится текст наподобие:

A fatal error was encountered. The library 'libhostpolicy.so' required to execute the application was not found in '/home/user/Documents/Project/'.
Failed to run as a self-contained app. If this should be a framework-dependent app, add the /home/user/Documents/Project/Project.runtimeconfig.json file specifying the appropriate framework.

Решение:

Необходимо скопировать файл Project.runtimeconfig.json в папку с защищенной программой (в примере - в папку /home/user/Documents/Project/).

Исключение TypeInitializationException

Признак:

При попытке запуска программы Project в терминале (для Linux) выводится текст наподобие:

Unhandled exception. System.TypeInitializationException: The type initializer for '<Module>' threw an exception.
 ---> System.DllNotFoundException: Unable to load shared library 'protectstorage64' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libprotectstorage64: cannot open shared object file: No such file or directory
   at Templates.CommonTemplate.Į(IntPtr Ǩ, IntPtr Ǩ)
   at Templates.CommonTemplate.į(IntPtr Ǩ, IntPtr Ǩ)
   at Templates.CommonTemplate.ĭ(Int32 Ǩ, Int32 Ǩ)
   at .cctor()
   --- End of inner exception stack trace ---
Aborted (core dumped)

Решение:

Необходимо убедиться, что файл библиотеки защиты libprotectstorage64.so является видимым для защищенной программы. Этот файл находится в корне проекта защиты (в папке, задаваемой в Protection Studio на вкладке Настройки как Выходная папка), как правило в этой же папке находится запускаемая защищенная программа. С помощью задания переменной среды LD_LIBRARY_PATH можно задать необходимый абсолютный либо относительный путь. Например, если файл библиотеки защиты находится на уровень выше относительно текущей папки, то команды запуска будут выглядеть как:

  • LD_LIBRARY_PATH=.. ./Project или
  • LD_LIBRARY_PATH=.. dotnet Project.dll.

Кроме того, стоит проверить права доступа пользователя (флаги чтения и запуска, имя и группа владельца файла).

Эта ошибка проявляется только в ОС Linux.

Исключение TargetInvocationException

Признак:

При попытке запуска программы Project в консоли (для Windows) либо терминале (для Linux) выводится текст наподобие:

Unhandled exception. System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> System.Exception
   at VM.VirtualMachine.Inject(String methodID)
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
   --- End of inner exception stack trace ---
   at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
   at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at ĭ.ĭ(String[] ਈ)
Aborted (core dumped)

Решение:

Эта ошибка характерна при защите файла программы с отключенной настройкой Проверка при запуске и с включенной настройкой Проброс исключений.

Необходимо реализовать правильную обработку исключений, выброшенных автоматической защитой. Как это сделать, см. здесь в разделе Обработка исключений.

  • No labels