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#应用程序运行调试,但并非没有
以下是一些想法。当应用程序启动时,它很可能在尝试实例化主窗体时失败。如果你在Visual Studio中运行,它可能会自行修复你创建的问题,并让你认为它会通过双击EXE来运行。
- 查看主Windows窗体的构造函数
- 查看windows窗体的OnLoad
- 在Program.cs文件中设置一个断点,在该文件中实例化主窗体,然后进入窗体代码——在visualstudio中使用F5运行,这样它就会运行调试副本
- 发布Program.cs和主窗体构造函数以及OnLoad方法中的代码,以便我们可以看到它
编辑:
RefreshForm()代码99%的可能性是问题所在。需要看看那个代码,但我敢打赌,如果你评论掉那一行,应用程序就会运行。
我要做的第一件事是采用RefreshForm()方法,并将其放入一个OnLoad事件中,包装在try中。。捕获块
try
{
RefreshForm();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
这样,如果RefreshForm是个问题,那么你就会知道原因,应用程序至少会启动。
如果你没有看到一个消息框,那么它是更基本的东西。
因此,很清楚是什么解决了问题:
- 从构造函数和onload中删除了与表单元素一起使用的函数,将其移动到onShow事件绑定函数
- 清理并重建了一切
- 我还需要添加"Runtime Implementation from'project-namehere'"answers"Localized resources from'projectnamehere'"才能运行。(我遵循的指南中没有具体说明)