以下是代码:
using System; using System.Windows.Forms; namespace HelloWorld { public partial class Form1 : Form { public Form1() { try { InitializeComponent(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } private void button1_Click(object sender,EventArgs e) { try { button1.Text = "Hello World"; button1.Enabled = false; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } } }
当我尝试在我的开发计算机上打开这个程序时,一切正常.我尝试在安装了.NET 3.5的10台不同的Windows PC上运行(我的目标平台),并且每个人都做同样的事情.
一旦我双击,或右键单击并以管理员身份运行,似乎应用程序什么都不做,但我可以告诉它正在做某事,因为鼠标光标变为等待光标……并且它无限期地执行此操作.它还会产生应用程序名称的3个无法终止的进程.没有错误或“此应用程序已停止工作”被抛出.
此外,我无法使用任务管理器,进程资源管理器,debugdiag或procdump创建故障转储.当我尝试使用进程资源管理器获取转储时…它会说“只是ReadProcessMemory的一部分”.当我尝试使用debugdiag创建时…转储是0字节并且在分析时失败.当我尝试使用procdump进行转储时…它将永远坐在那里.
我甚至试图以这种方式试图强迫某种错误……
using System; using System.Windows.Forms; namespace HelloWorld { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { try { System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); System.Windows.Forms.Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(OnGuiUnhandedException); AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } catch (Exception e) { HandleUnhandledException(e); } finally { // Do stuff } } private static void HandleUnhandledException(Object o) { // Todo: Log it! Exception e = o as Exception; if (e != null) { } } private static void OnUnhandledException(Object sender,UnhandledExceptionEventArgs e) { HandleUnhandledException(e.ExceptionObject); } private static void OnGuiUnhandedException(object sender,System.Threading.ThreadExceptionEventArgs e) { HandleUnhandledException(e.Exception); } } }
后来我尝试在Main()函数开头的program.cs中放入一个MessageBox和一个返回.它仍然在所有10台PC上做同样的事情.所以我认为当程序运行时,它实际上从未达到过:
Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1());
毕竟,我想知道它是否必须对我的Visual Studio设置或配置做任何事情.
我采取的步骤:
>我在Visual Studio 2015中创建了新的winforms应用程序
>我将.Net平台改为3.5
>我编写简单的应用程序如上所示
>在配置管理器下,我改为x86
>我内置了调试和发布模式
在此之后,我尝试了3种部署方法:
>将整个版本文件夹复制到另一台计算机
>尝试过ClickOnce技术
>尝试过InstallShield Limited
所有这些都没有用.它们都做同样的事情……产生3个具有相同名称但无法终止的进程,除非我重新启动计算机.无法创建转储以查看问题所在.我跑步时无限期挂起,不显示任何错误或窗口. ClickOnce和InstallShield永远不会通过任何类型的向导.他们只是无限期地挂起……
我尝试在朋友的PC上定位2.0,3.0,3.5,4.0,4.5,4.5.2 .NET版本,我也遇到了同样的情况.这些PC是Windows 7和8.1.为什么我的简单HelloWorld应用程序会这样做?它是否在我的Visual Studio配置中?
解决方法
当我在创建项目之前选择除4.5.2之外的任何其他框架时,它可以工作.
我不知道为什么,但它为我修好了.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。