Есть ли способ внедрить библиотеку dll C# в уже запущенную среду выполнения

#c# #clr

#c# #сброс

Вопрос:

Я использовал CLR для создания нового экземпляра в процессе, но затем я заметил, что в нем запущен еще один, могу ли я захватить эту среду выполнения и загрузить туда свою .dll?

 if (CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)amp;metaHost) == S_OK) //If Creating CLR Instance with follow parameters is successful  if (metaHost-gt;GetRuntime(L"v4.0.30319", IID_ICLRRuntimeInfo, (LPVOID*)amp;runtimeInfo) == S_OK) //If getting Runtime version is successful  if (runtimeInfo-gt;GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*)amp;runtimeHost) == S_OK) //If getting the interface with the follow parameters is successful  if (runtimeHost-gt;Start() == S_OK) //Start the CLR (If it is successful)  {  DWORD pReturnValue; //Declare our return value as a DWORD  printf("MethodInvokedn");  //Invoke our method through CLR host using following parameters D:vs-WorkSpaceRaid 2binReleaseExampleProject.dll  runtimeHost-gt;ExecuteInDefaultAppDomain(L"PathToDll\C1CHelperDll.dll", L"C1CHelperDll.Program", L"pwzMethodName", L"It works!!", amp;pReturnValue);   printf("MethodIdkn");  std::ostringstream stream;  stream lt;lt; pReturnValue;  std::string str = stream.str();  printf(str.c_str());  printf(" Resultn");   //OPTIONAL: You can keep the CLR Opened depending on your needs  runtimeInfo-gt;Release();  metaHost-gt;Release();  runtimeHost-gt;Release();  }  return 0;  

Комментарии:

1. Я не знаю, что значит «внедрить» DLL в процесс. Можете ли вы объяснить, что это значит для вас?

2. Прямо сейчас я создаю вторую среду выполнения в процессе для запуска моей библиотеки DLL. Но у этого процесса уже есть среда выполнения внутри. Итак, могу ли я каким-то образом использовать эту среду выполнения для запуска своей библиотеки DLL?

3. Что вы имеете в виду под «созданием среды выполнения»? Вы имеете в виду, что пишете программу? Или вы имеете в виду, что процесс что-то загружает? Кроме того, что вы подразумеваете под запуском библиотеки DLL? Библиотека DLL обычно является библиотекой, а не исполняемым файлом. Возможно, если бы вы поделились каким-то кодом, ваш вопрос был бы более ясным.

4. Я просто отредактировал основной пост, чтобы более четко понять, что я делаю, я создаю среду выполнения в другом пространстве процессов, а затем выполняю DLL C# в этой среде выполнения. Могу ли я использовать существующую среду выполнения для выполнения моей библиотеки DLL C#?