【问题标题】:.NET 2.0 program (VS 2005) runs in Visual Studio but not from Windows Explorer.NET 2.0 程序 (VS 2005) 在 Visual Studio 中运行,但不能从 Windows 资源管理器中运行
【发布时间】:2009-06-26 12:23:01
【问题描述】:

有人看过吗?

有几秒钟的延迟,然后其中一个对话框显示“雅达雅达遇到问题,需要关闭。对于给您带来的不便,我们深表歉意。” (这很奇怪,因为我的程序有一个异常处理系统,如果在我的代码中抛出异常,它会给出有用的错误消息,但显然没有达到这一点:这个对话框与你尝试运行时看到的相同在未安装 .NET 的机器上的 .NET 程序。)同样的二进制文件可以在其他 Windows 系统上运行。

我尝试重新安装 .NET 2.0。我试过删除它(不允许我)。我尝试“更改”它(显然没有任何变化)。我尝试重新发布我的项目(ClickOnce),它仍然可以在其他机器上运行,但不能在我的开发机器上运行,除了在 Visual Studio 中。我尝试删除已安装的 ClickOnce 项目并重新安装,但它仍然无法启动程序。

我找到的最接近的东西是this(阅读他的澄清),但这些解决方案都没有奏效。

我正在考虑重命名程序并重新发布和重新安装,看看它是否与神秘的 GAC 或邪恶的注册表有关。

【问题讨论】:

  • 事件日志是否提供错误的任何其他详细信息?
  • 顺便说一下,这只发生在我的开发机器上的一个特定程序集 (myapplication.exe) 上。
  • 嗯,我想解决方案很简单:我有一台新的开发机器,所以问题就解决了。感谢所有的投入。我将其中一个更有帮助的答案标记为已接受,尽管我认为这个问题除了以下之外没有真正的解决方案:重新安装 Windows! [讽刺] 好玩! [/讽刺]

标签: .net visual-studio-2005 gac


【解决方案1】:

使用事件查看器检查应用程序事件日志。您可能不会获得很多信息,但有时它可以为您指明正确的方向。

【讨论】:

  • 每次尝试运行时都会出错:事件类型:错误事件源:.NET 运行时 2.0 错误报告事件类别:无事件 ID:1000 用户:N/A 描述:故障应用程序 myapplication.exe,版本 1.0.0.0,标记 49fbbc29,故障模块 kernel32.dll,版本 5.1.2600.5781,标记 49c4f482,调试? 0、故障地址0x00012afb。
【解决方案2】:

您有什么可以在应用程序事件部分捕获和报告未处理的异常吗?

【讨论】:

  • 我的二进制文件根本没有启动,否则它会命中我的异常处理程序(我希望如此),所以我不相信它在我的代码中......我的意思是,它是完美的(在启动时) 在其他机器上和来自 VS。
  • 你可能还想在那个部分放一些东西,看看它是否能捕捉到任何东西。
  • 我确实在其中放了一些东西:我有一个全局异常处理程序,它在程序实际运行时效果很好。正如我所指出的,它甚至根本没有运行 .NET 代码,否则它会遇到我的异常处理程序并给我一个 .NET 错误而不是 Windows 错误。
  • 您能否向我们展示您的全局异常处理程序的代码以及注入的方式/位置?还要检查那台机器上的 Windows 事件日志,那里可能有一些更详细的信息。
【解决方案3】:

我还建议手动将 EXE 和 Dll 复制到一个目录中,并为自己获取 Reflector 的副本并使用反射器打开您的主应用程序 exe,然后浏览所有引用。也许存在一些依赖关系,它期望不同的版本或 Gac 中的某些旧版本,而您认为已将其删除。

同时在你的程序中找到入口点,看看 Reflector 认为它在做什么。

【讨论】:

  • 顺便说一句,你说的是这个红门的反射器吗?
【解决方案4】:

您是否尝试过可再发行组件 (vcredist_x86.exe)?

【讨论】:

  • 您是否正在使用 DLL 制作项目?需要注册吗?
  • 好点。我的先决条件包括,但每次我尝试安装时,它都会挂起,所以我会取消并单击启动。更新:我只是让它运行安装并尝试启动应用程序但仍然有同样的问题。 (可能是因为当它完成时,我的默认浏览器已启动(Firefox),它无法处理 .application 文件类型)。乌格。我讨厌这些东西。尝试让 IE 成为默认浏览器,但仍需要重新安装 VC Redist ......它没有正确安装,否则每次单击“安装”按钮或小启动链接时它都不会要求它。 :(
  • 纯 .NET 项目不需要 VC 可再发行组件。
  • 这真的很奇怪,因为我有另一个带有 C++ Redist prereqs 的 .NET 程序,它可以很好地安装/更新。看来这一组件被搞砸了。我会尝试重命名它并重新发布到一个新的 URL,然后看看我在哪里。 @ryannsstack:我的项目有几十个 DLL。除了使用 ClickOnce 的东西,我如何注册它们?具有 DLL 超集的其他项目可以正确安装/发布。不知何故,这个被粘住了。 (我想我之前在访问或缓存术语方面遇到了一个烦人的问题......)
  • 我认为问题与 vcredist 相关,否则该组件将正确安装。
【解决方案5】:

您是否尝试过手动将 exe 和支持文件复制到计算机而不是使用发布?也不是您想经历麻烦,而是在我们偶尔遇到此类问题的机器上,我们安装了 Visual Studio 的副本,因此它会出现调试或关闭提示,我们点击调试并复制源代码它要求的代码文件,我们可以看到更多详细信息。

【讨论】:

  • 是的,正如我提到的,我可以进入 Release 目录并将所有 DLL 和 EXE 复制到一个新文件夹中,然后双击 .exe,它会在运行我的代码之前崩溃。手动复制的 DLL 和 EXE 的同一文件夹将在其他机器上正常运行。
【解决方案6】:

直接双击编译器输出不运行?如果是这样,通常为我解决这个问题的方法是为项目中引用的所有 DLL 指定 Copy Local = True。

【讨论】:

  • 无法弄清楚如何在 VS 2005 中执行此操作。我在哪里单击以找到“复制本地”?我找到了“复制到输出目录”并将其设置为“如果较新则复制”,但我看不出这对我有什么帮助,因为我的 Release 文件夹包含所有必需的 DLL 和 EXE,并且手动将同一个文件夹复制到另一台机器允许.exe 可以顺利运行。
  • 如果解决方案资源管理器和属性选项板可见(分别为视图->解决方案资源管理器和视图->属性窗口),展开项目的 References 伪文件夹,它应该会显示您引用的程序集.当您选择其中一个引用的程序集时,其属性会显示在“属性”窗口中,其中之一是“复制本地”,位于“别名”和“(名称)”下方(其他一些是只读的,包括“文件类型”、“身份”、“路径”、“已解析”、“运行时版本”、“强名称”和“版本”)
  • @Dov:不走运。唯一具有 Copy Local = False 的 DLL 是 System.* 并将其更改为 True 确实将它们复制到了输出文件夹,但从资源管理器(通过双击)运行 .exe 仍然不会启动我的程序。
  • 是的,如果我将文件夹复制到另一台计算机上,它运行正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多