C#Winform应用程序在其他计算机上不工作(启动时神秘挂起)

C#Winform应用程序在其他计算机上不工作(启动时神秘挂起),c#,.net,winforms,visual-studio,deployment,C#,.net,Winforms,Visual Studio,Deployment,我在Visual Studio中制作了一个winforms应用程序。这个应用程序是一个简单的Hello World应用程序,当按下按钮时,它会将按钮文本更改为“Hello World” 代码如下: using System; using System.Windows.Forms; namespace HelloWorld { public partial class Form1 : Form { public Form1() {

我在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());
            }
        }
    }
}
当我尝试在我的开发计算机上打开这个程序时,一切正常。我试着在10台安装了.NET3.5(我的目标平台)的不同Windows PC上运行,他们每个人都做同样的事情

当我双击或右键单击并以管理员身份运行时,应用程序似乎什么都不做,但我可以看出它正在做什么,因为鼠标光标变为等待光标。。。它无限期地这样做。它还会产生3个无法终止的应用程序名称进程。不会抛出任何错误或“此应用程序已停止工作”

此外,我无法使用任务管理器、process explorer、debugdiag或procdump创建崩溃转储。当我尝试使用process explorer获取转储时。。。它会说“只是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);
        }
    }
}
在所有这些之后,我想知道它是否与我的VisualStudio设置或配置有关

我采取的步骤:

  • 我在Visual Studio 2015中创建了新的winforms应用程序
  • 我把.Net平台改成了3.5
  • 我编写了如上所示的简单应用程序

  • 在configuration manager下,我改为x86
  • 我内置了调试和发布模式
  • 在此之后,我尝试了3种部署方法:

    • 已将整个版本文件夹复制到另一台计算机
    • 尝试ClickOnce技术
    • 金盾有限公司
    所有这些都不起作用。他们都做同样的事。。。生成3个同名进程,除非重新启动计算机,否则无法终止这些进程。无法创建转储以查看问题所在。运行时无限期挂起,不显示任何错误或窗口。ClickOnce和InstallShield从不执行任何类型的向导。他们也会无限期地被绞死


    我也试着在我朋友的PC上瞄准2.0、3.0、3.5、4.0、4.5、4.5.2.NET版本,我也遇到了同样的情况。这些电脑是windows 7和8.1。为什么我的简单HelloWorld应用程序会这样做?这是我在Visual Studio上的配置吗?

    我似乎终于解决了这个问题。问题是当我创建新项目时。它始终以4.5.2为目标。然后,我将转到项目设置并从那里更改框架版本

    当我在创建项目之前选择除4.5.2之外的任何其他框架时,它都可以工作


    我不知道为什么,但它为我解决了这个问题。

    真的没有必要用“编辑”或其他任何标记对您的帖子进行编辑。其他用户将看到您的帖子已被编辑,可以查看修订历史手册。我已经删除了那些不必要的东西,并做了其他一些小的改进。但总的来说,这是一篇相当不错的帖子,“在configuration manager下,我改为x86”。您的机器是32位还是64位?其他机器是32位还是64位?@ChrisF我的机器是64位。我10个朋友中有8个是64位的。我也尝试过使用64位,但同样的情况仍然存在。
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());