我在Visual Studio中制作了一个winforms应用程序。该应用程序是一个简单的Hello World应用程序,按下后会将按钮的文本更改为“ Hello World”。

这是下面的代码:

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()函数的开头放置一个MessageBox和一个return到program.cs中。在所有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为目标。然后,我将转到项目设置并从那里更改框架版本。

当我在创建项目之前选择4.5.2以外的任何其他框架时,它将起作用。

我不知道为什么,但是它为我解决了。

10-06 13:15
查看更多