wpf - WPF 程序启动进程,但无法正常启动、加载 .NET 程序集或创建窗口
问题描述
我有一个我编写的 .NET Framework 4.7.2 WPF 应用程序,它在我尝试过的每台计算机上都可以正常工作 - 除了在一个用户的计算机上(分别由另外 2 个人通过 TeamViewer 和 LogMeIn 远程访问)双击后EXE 文件(或从命令行运行它)进程出现在任务管理器中,但它不会“运行”或创建任何窗口。在执行进入 WPF 方法之前,应用程序的启动代码很少,Application.Run
所以我不确定发生了什么。
这是在安装了 .NET Framework 4.8 的 Windows 7 SP1 x64 机器上。
任何 Windows 事件日志中都没有记录任何相关内容。
解决方案
我在计算机上安装了 Microsoft 的Sysinternals Suite以使用Process Explorer ( ProcExp
) 和Process Monitor ( ProcMon
) 来查看进程在它坐在那里时实际在做什么,什么都不做。
ProcExp 透露,尽管是一个 .NET 进程,但该进程并未将任何 .NET 程序集加载到自身中——这表明 CLR 初始化过程中出现了问题(因为mscorlib.dll
程序集应该在其他任何事情之前加载)。
我杀死了该进程,然后运行 ProcMon 以在该进程启动时对其进行监视,并启动了该程序的一个新实例- ProcMon 显示该进程最初正常加载和读取系统文件-但由于某种原因,我看到它然后加载了C:\Users\$userName\AppData\Local\LogMeIn Rescue Applet\lmirhook.001.dll
-然后该进程开始从SysWow64
我的进程通常不加载的其他本机 DLL 加载,这些 DLL 与我假设 LogMeIn 正在加载的 Windows 的 Internet 堆栈相关。
我注意到计算机有两个同时运行的 LogMeInRescue 并发安装(或者至少在计算机管理 > 服务中有两个条目,名称中有不同的 GUID)。
我停止了两个 LogMeIn Rescue 会话,这意味着它们都立即自行卸载了 LogMeIn Rescue。在验证计算机上不再存在 LogMeIn Rescue 后,我看到我的程序现在开始运行而没有任何问题,并加载了 .NET Framework、.NET 程序集并按预期创建了窗口。
然后我从他们的网站重新打开 LogMeIn Rescue - 只运行一个 LogMeIn Rescue 实例(而不是在问题存在时运行的两个实例),我的程序也运行良好。
因此,显然每个 LogMeIn Rescue 实例都试图将自己的本机代码注入每个进程并且它停止了,大概是因为每个实例的注入代码由于某种原因与另一个实例的代码冲突,然后这会阻止进程的其余部分做任何事情,所以它坐在那里空闲(我怀疑它会导致主线程中止,但会创建另一个被阻塞的线程,因此 Windows 永远不会终止该进程,因为另一个线程没有被标记为后台线程(因为 Windows 永远不会用非后台线程终止进程) ,即使这些线程被阻塞)。
TL;博士:
确保计算机上没有运行 2 个或更多 LogMeIn Rescue 实例。如果是这样,请将它们都删除,再试一次,然后只允许 1 个实例返回。
推荐阅读
- java - 如果未在特定时间单击通知上的操作按钮,则会执行其他操作
- python - Pyinstaller 运行 exe 文件时出错
- macos - Mac 控制中心“正在播放”信息未显示超过 1 小时的持续时间
- hadoop - Hadoop fs复制命令?
- c# - 是否有返回 MVC .Net Framework 中返回的最后一个视图的函数
- taleo - Taleo Connect 客户端脚本
- jinja2 - markdown 模板中 jinja2 中的变量使用
- python-3.x - 将 pandas 数据框列从列表展平到它们自己的特定列
- java - 难以将 Google Guava 地图元素添加到 java 中的数组
- java - SetAdapter 空指针对象异常