繁体   English   中英

安装在程序文件中的奇怪的.NET应用程序行为

[英]Odd .NET application behavior when installed in Program Files

我正在努力了解.NET应用程序的某些奇怪行为。 我有一个用C#编写的应用程序,目标是.NET 4.5.2,我正尝试将其部署用于测试目的。 该应用程序在Visual Studio(2015)下运行时运行良好,并且在部署到C:\\ Program Files(x86)时也运行了一段时间。 但是,今天我尝试再次运行该应用程序,它立即引发一个可怕的System.ComponentModel.Win32Exception(该操作成功完成)。

该应用程序在Visual Studio调试器下仍然可以正常运行,如果我从Visual Studio版本目录中手动运行该应用程序,则该应用程序也可以正常运行。 有趣的是,如果我执行以下任一操作,该应用程序也可以正常运行:

  • 重命名程序文件目录中的可执行文件(例如,从x.exe到y.exe)
  • 重命名程序文件中的目录

到目前为止,我唯一能想到的是:

  • 我机器上的其他东西引起了它的问题(也许是防病毒?)。 尽管我在日志中找不到任何东西可以支持这一点。
  • Windows是如何缓存可执行文件的旧版本并使用它的? 我不确定这是否真的发生,这只是一个想法。

我浏览了事件查看器,看到了与此相关的错误,但是日志条目没有提供有关异常情况的任何额外信息。

任何建议将不胜感激。

编辑:我试图将VS调试器附加到该进程,但它没有给我任何额外的信息。 但是,我只是更改了项目调试设置下的启动操作,以运行位于程序文件中的可执行文件,它引发了一个不同的异常:“托管调试助手'FatalExecutionEngineError'在'C:\\ Program Files(x86)中检测到问题。 ..”

附加信息:运行时遇到致命错误。 错误的地址位于线程0x1d00上的0x010cf00c。 错误代码为0xc0000005。 此错误可能是CLR或用户代码中不安全或不可验证部分的错误。 该错误的常见来源包括COM-interop或PInvoke的用户封送处理错误,这些错误可能会破坏堆栈。

如果我继续处理该异常,则会在之后立即收到另一个消息:“未知模块中发生了类型为'System.ExecutionEngineException'的未处理异常”。

问题出在这里是由于某种原因,Program Files目录中的可执行文件的兼容模式已设置为“ Windows 95”! 我不知道这怎么会这样(我当然没有设置!),但是无论哪种方式,当禁用兼容模式时,所有功能都可以按预期工作(毫不奇怪)! 感谢所有发表评论的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM