2016-07-29 104 views
-4

我重新发布了两天前我问过的东西 - 但我没有清楚地解释自己。C#Dll卸载自己?是否有可能

是否有可能得到一个注入的C#DLL自我卸载后,它已经执行其功能?

我可以让我的C#DLL加载到一个C++程序,但卸载部分是困难的。我可以这样做,这要归功于Robert Giesecke's Unmanaged Exports

本质上,C++程序加载指定文件夹中的所有dll并运行导出的函数_start()。

我想用我已经成功实现的导出方法_start()'注入'个人C#dll。 C++程序将加载并运行该函数,但未编程为在卸载之后。我希望_start()方法结尾的c#dll以某种方式卸载它自己。

我已经打过电话了进口的FreeLibraryAndExitThread(),开始为C#DLL

t.Thread(() => FreeLibraryandExitThread()); t.Start();

但是它不工作...林不知道,如果有更多的内部一个单独的线程这导致它是一个托管的DLL,我已经搜索并发现该方法适用于C++ dll。

谢谢

+0

使用应用程序域。 –

回答

0

我不认为它会工作。使用外部句柄(LoadLibrary将从DLL之外的区域调用)调用FreeLibrary,因为代码在内存位置中运行,该内存位置不再有效。

即使这是可能的,它闻起来像一个糟糕的设计。也许你想做一些更新或相似。多解释一下你期望的结果。从本身卸载DLL并不是要走的路。