C#Windows窗体应用程序的部署

本文关键字:部署 应用程序 窗体 C#Windows | 更新日期: 2023-09-27 18:27:42

我正试图使用Visual Studio Community 2015创建一个简单的可安装表单应用程序。

我已经完成了以下演练:https://msdn.microsoft.com/library/k3bb4tfd%28v=vs.100%29.aspx

由于安装项目模板最初并不存在,我使用https://visualstudiogallery.msdn.microsoft.com/f1cc3f3e-c300-40a7-8797-c509fb8933b9添加它们。

我能够成功地制作安装程序,以及成功地安装应用程序。然而,当我尝试运行应用程序(通过转到其安装的文件夹)时,windows资源管理器只是坐在那里,就像它试图做一些事情,但从来没有做过一样。我最终需要重新启动计算机才能取消这个从未启动的过程。

当我尝试在没有安装程序的情况下独自运行构建的应用程序,运行构建实际应用程序生成的可执行文件时,也会看到同样的行为。(深入项目的垃圾桶)。

我以前在新的indev程序中看到过类似的行为(https://github.com/Storj/driveshare-gui/releases),但不知道这些问题是否必然相关。

应用程序本身在由Visual Studio调试时运行良好。我使用Visual C#"Windows窗体应用程序"模板创建了原始应用程序。

请告诉我,如果有什么你需要看的,我不知道。

程序.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Parking_Variable_Editor {
    static class Program {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }
}

构造函数&从MainForm.cs(项目中唯一的表单)加载

public MainForm() {
    InitializeComponent();
}
private void onShown(object sender, EventArgs e) {
    refreshForm();
}

更新:

我让这个项目在没有调试的情况下运行。我通过在显示表单时刷新表单来实现这一点,因为onLoad似乎试图在初始化之前进行刷新。然而,现在,同样的问题只发生在已安装的应用程序上。

C#Windows窗体应用程序的部署

我以前见过这个问题,其他人也遇到过:C#应用程序运行调试,但并非没有

以下是一些想法。当应用程序启动时,它很可能在尝试实例化主窗体时失败。如果你在Visual Studio中运行,它可能会自行修复你创建的问题,并让你认为它会通过双击EXE来运行。

  1. 查看主Windows窗体的构造函数
  2. 查看windows窗体的OnLoad
  3. 在Program.cs文件中设置一个断点,在该文件中实例化主窗体,然后进入窗体代码——在visualstudio中使用F5运行,这样它就会运行调试副本
  4. 发布Program.cs和主窗体构造函数以及OnLoad方法中的代码,以便我们可以看到它

编辑

RefreshForm()代码99%的可能性是问题所在。需要看看那个代码,但我敢打赌,如果你评论掉那一行,应用程序就会运行。

我要做的第一件事是采用RefreshForm()方法,并将其放入一个OnLoad事件中,包装在try中。。捕获块

try
{
    RefreshForm();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

这样,如果RefreshForm是个问题,那么你就会知道原因,应用程序至少会启动。

如果你没有看到一个消息框,那么它是更基本的东西。

因此,很清楚是什么解决了问题:

  1. 从构造函数和onload中删除了与表单元素一起使用的函数,将其移动到onShow事件绑定函数
  2. 清理并重建了一切
  3. 我还需要添加"Runtime Implementation from'project-namehere'"answers"Localized resources from'projectnamehere'"才能运行。(我遵循的指南中没有具体说明)