簡體   English   中英

C#Winform應用程序無法在其他計算機上運行(神秘的啟動時)

[英]C# Winform App Not Working On Other Computers (Mysterious Hang On Startup)

我在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()函數開頭的program.cs中放入一個MessageBox和一個返回。 它仍然在所有10台PC上做同樣的事情。 所以我認為當程序運行時,它實際上從未達到過:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());

畢竟,我想知道它是否必須對我的Visual Studio設置或配置做任何事情。

我采取的步驟:

  1. 我在Visual Studio 2015中創建了新的winforms應用程序
  2. 我將.Net平台改為3.5
  3. 我編寫簡單的應用程序如上所示
  4. 在配置管理器下,我改為x86
  5. 我內置了調試和發布模式

在此之后,我嘗試了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之外的任何其他框架時,它可以工作。

我不知道為什么,但它為我修好了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM