2016-11-24 79 views
0

我看到一些奇怪的行为,我正努力去理解.NET应用程序。我有一个用C#编写的应用程序,面向.NET 4.5.2,我试图部署用于测试目的。在Visual Studio(2015)下运行时,该应用程序一直运行良好,并且在部署到C:\ Program Files(x86)时也有一段时间。但是,今天我试图再次运行该应用程序,它立即抛出一个令人畏惧的System.ComponentModel.Win32Exception(操作成功完成)。在Program Files中安装奇怪的.NET应用程序行为

该应用程序在Visual Studio调试器下依然可以正常运行,并且如果从Visual Studio版本目录手动运行该应用程序,它也可以正常运行。有趣的是,应用程序也运行正常,如果我可以:

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

我能想到的迄今唯一事情是:

  • 东西在我的机器上的其他人造成出了问题(防病毒吧?)。尽管我在日志中找不到任何内容来支持此操作。
  • Windows是一些如何缓存旧版本的可执行文件并使用它?我不确定这是否真的发生,但这只是一个想法。

我查看了事件查看器并查看与此相关的错误,但日志条目未提供有关例外情况的任何额外信息。

任何意见将不胜感激。

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

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

如果我继续过去那个异常,我会立即得到另一个: “未知模块中发生未处理的类型为”System.ExecutionEngineException“的异常。

+1

检查事件查看器..听起来像一个可能的权限问题。编辑:我看到你检查了事件查看器...尝试将VS调试器附加到应用程序进程.. –

+0

@daveL:感谢您的建议。我在上面的编辑中添加了一些额外的信息。 – trigger

+3

如果你得到FEEE,那么任何事情都是可能的。它不会立即被检测到,通常只有当垃圾收集器运行时才会被检测到。在此之前,您的程序正在运行一个损坏的堆。 *任何事情*都可能发生。 –

回答

0

这里的问题原来是在某种程度上,Program Files目录内的可执行文件的兼容模式已被设置为“Windows 95”!我不知道这是如何结束的(我当然没有设置它!),但无论哪种方式,禁用兼容模式时,所有工作都按预期进行(不出所料)!感谢所有评论过的人。