يطبق هذا المشروع مكتبة حقن .NET Assembly (مستوحاة من مشروع snoopwpf). يمكن أن تكون العملية عن بعد مُدارة أو غير مُدارة.
عندما تريد إدخال تجميع في عملية بعيدة، عليك أن تأخذ في الاعتبار الجوانب التالية:
إذا تم استيفاء الشروط المسبقة المذكورة أعلاه، فيمكنك إدخال تجميع واستدعاء طريقة التنشيط. هناك ثلاثة احتمالات لاستدعاء طريقة التنشيط:
يتم استخدام هذه المكتبة أيضًا بواسطة Shed لإدخال ملف DLL في عملية بعيدة. يمكنك مشاهدة الفيديو هنا.
للحصول على أمثلة عملية، راجع مشروع TestRunner.
إذا كان التجميع الذي تم إدخاله يحتوي على أي تبعيات على تجميعات .NET غير القياسية، فيمكنك إضافة تلك التبعيات باستخدام أسلوب AddDependency
.
إذا كان التجميع المحقون يحتاج إلى تحميل بعض الملفات الخارجية لكي يعمل بشكل صحيح (مثل ملف التكوين)، فيمكنك تحديدها باستخدام طريقة AddFile
. ستقوم هذه الطريقة بنسخ الملف المحدد في دليل العمل للعملية المحقونة.
في بعض الحالات يكون من الضروري تمرير وسيطة إلى الطريقة التي يتم استدعاؤها في التجميع المحقون. يتم تحقيق ذلك عن طريق تمرير كائن context
إلى أسلوب Inject
. بعد ذلك، يحتاج الأسلوب Injected
إلى تحويل كائن context
إلى النوع الحقيقي (راجع AssemblyWithMethodAcceptingAnArgument
للحصول على مثال). يستخدم إطار العمل فئة BinaryFormatter
لإجراء تسلسل لكائن context
، لذا تأكد من إمكانية إجراء تسلسل للكائن المحدد.
دعونا نفكر في الكود التالي:
using System;
namespace InjectedAssembly
{
public class Main
{
// we use a default injection method name in order to execute our code in the remote process
private static void Inject()
{
Console.WriteLine("Hello world from the injected process!");
}
}
}
من أجل حقن التجميع الناتج من الكود أعلاه يكفي استخدام الكود التالي:
var pid = 1234;
var injector = new Injector(pid, Assembly.LoadFile("AssemblyToInject.dll"));
var injectionResult = injector.Inject();
لمزيد من الأمثلة، قم بإلقاء نظرة على مجلد المثال.
تم تطوير ManagedInjector حاليًا باستخدام VisualStudio 2017 Community Edition (تأكد من تثبيت أحدث إصدار). لإنشاء الكود المصدري، تأكد من أنه يتعين عليك:
build.bat
نحن نستخدم SemVer للإصدار. للتعرف على الإصدارات المتوفرة، راجع العلامات الموجودة في هذا المستودع.
تم ترخيص Managed Injector بموجب المشاع الإبداعي.