AppDomain.CurrentDomain.AssemblyResolve 只有在调试时在特定位置设置断点,程序才能正常运行?

weixin_38067693 2018-10-12 01:31:30
wpf程序app1 和dll1在同一目录下,启动app1,可以正常运行。

现在将dll1进行了加密并命名为Min_dll1.dll,并且没有放在app1的exe的同一目录下
app2.exe
dll2.dll
app1.exe
dll/ Min_dll1.dll (当前目录的dll文件夹下)

用另一个wpf程序app2开辟一个新的Appdomin运行app1,并且添加了AppDomain.CurrentDomain.AssemblyResolve处理
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(wuutpoinhstujhnnxasjhgs_maigc);
 Assembly wuutpoinhstujhnnxasjhgs_maigc(object sender, ResolveEventArgs args)
 {
         string module = wuutpoinhsajdkkqs_maigc(args.Name);
          if (module.Substring(0, 4) == "Min_")
         {
              return hopdhhncndfgenga_maigc(module);
         }
         else
         {
               return tiijjjjqndfgenga_maigc(module);
         }
}
Assembly hopdhhncndfgenga_maigc(string module)
{
       string dll = Path.Combine(App.sAppStartPath + App.configer.GetNodeProperty("configuration//App//ref", "mine"), string.Format("{0}.dll", module));
        ***byte[] otherAssemblyBytes = Detools.DesDecryptBYTE(module, dll);
        ***return Assembly.Load(otherAssemblyBytes);
***}
调试提示FileNotFoundException,无法加载dll1.dll,只有在上面代码***处设置断点,再调试运行则可以正确运行





...全文
494 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38126921 2018-11-22
  • 打赏
  • 举报
回复
目前测试LoadFrom可以,但是有一个问题,就是必须在默认appdomain中释放dll到文件,然后在另一个appdomain中使用LoadFrom(path)来调用,如果不在默认appdomain中释放,改成在当前appdomain释放则还是出现FileNotFoundException
weixin_38126796 2018-10-18
  • 打赏
  • 举报
回复

Hi   ZionFeng,

据我所知,产生此类问题的原因主要有以下两点:

1)程序中存在死循环。

2)程序为多线程程序,且在窗体关闭后,仍有线程在工作。

所以,请先确保在窗体关闭后没有任何线程在工作。

你可以尝试在直接在App.xaml中,设置 Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
<Application ShutdownMode="OnExplicitShutdown" >

然后在关闭窗体方法中调用Application.Current.Shutdown() 方法关闭整个Application。 Application退出 进程就结束了,就会释放进程中的所有资源。
 


weixin_38125855 2018-10-17
  • 打赏
  • 举报
回复
尝试了在~app(){}中添加
Environment.Exit(0); System.Diagnostics.Process.GetCurrentProcess().Kill();
也无法完成退出程序,任务管理器中还存在
weixin_38125280 2018-10-17
  • 打赏
  • 举报
回复
尝试了 注册了 DispatcherUnhandledException事件
DispatcherUnhandledException += App_RefRelocate;

void App_RefRelocate(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { e.Handled = true; }
程序可以正确运行,但是关闭窗口后,后台进程还存在,如果不注册这个事件,则可以正确退出程序
weixin_38121708 2018-10-17
  • 打赏
  • 举报
回复
尝试了在代码***处设置线程延迟了10秒,并且以管理员运行,还是抛出同样的异常
weixin_38113326 2018-10-16
  • 打赏
  • 举报
回复

Hi  ZionFeng, 

>> Assembly.LoadFrom(path)需要把字节写到文件,我希望不要生成这个文件才使用的Assembly.Load(byte[])

你可尝试下面的方法

1: 在代码***处设置线程延迟一段时间

2: 以管理员运行当前程序

weixin_38095196 2018-10-15
  • 打赏
  • 举报
回复
Assembly.LoadFrom(path)需要把字节写到文件,我希望不要生成这个文件才使用的Assembly.Load(byte[])
weixin_38076910 2018-10-15
  • 打赏
  • 举报
回复
Hi  ZionFeng, 

>>调试提示FileNotFoundException,无法加载dll1.dll,只有在上面代码***处设置断点,再调试运行则可以正确运行

比较奇怪的现象,你使用LoadFrom试试看是否会有一样的问题。
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { AssemblyName assemblyName = new AssemblyName(args.Name); return Assembly .LoadFrom(Path.Combine( "dll", assemblyName.Name + ".dll" )); }

weixin_38082570 2018-10-15
  • 打赏
  • 举报
回复
Hi  ZionFeng, 

>>调试提示FileNotFoundException,无法加载dll1.dll,只有在上面代码***处设置断点,再调试运行则可以正确运行

比较奇怪的现象,你使用LoadFrom试试看是否会有一样的问题。
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { AssemblyName assemblyName = new AssemblyName(args.Name); return Assembly .LoadFrom(Path.Combine( "dll", assemblyName.Name + ".dll" )); }

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧