2015-12-22 76 views
0

我試圖使用Visual Studio創建社區一個簡單的安裝,能夠申請表格2015年部署窗體應用程序

我跟了這演練:https://msdn.microsoft.com/library/k3bb4tfd%28v=vs.100%29.aspx

作爲安裝工程模板沒有原來目前,我用https://visualstudiogallery.msdn.microsoft.com/f1cc3f3e-c300-40a7-8797-c509fb8933b9來添加它們。

我能夠成功地製作安裝程序,併成功安裝應用程序。但是,當我嘗試運行該應用程序(通過轉到其安裝的文件夾),Windows資源管理器就坐在那裏,就像它試圖做某事,但從來沒有。我最終需要重新啓動計算機才能取消永不開始的過程。

當我嘗試自行運行構建的應用程序時,如果沒有安裝程序運行構建實際應用程序時生成的可執行文件,則會看到相同的行爲。 (潛入項目的bin /中)。

我曾經在(https://github.com/Storj/driveshare-gui/releases)之前看到過與新的indev程序類似的行爲,但不知道這些問題是否必然相關。

當由Visual Studio調試時,應用程序本身運行良好。我使用Visual C#「Windows窗體應用程序」模板來創建原始應用程序。

請讓我知道是否有什麼你需要看到,我不知道。

的Program.cs:從MainForm.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()); 
     } 
    } 
} 

構造&的onload(在該項目的唯一形式)

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

更新:

我已經得到了該項目運行時無需調試。我通過刷新表單來刷新表單,因爲onLoad在初始化之前似乎試圖做到這一點。但是,現在只有安裝的應用程序纔會發生同樣的問題。

+0

如果從bin目錄啓動它時應用程序無法正常運行,那麼在爲其創建安裝程序後,如果該應用程序無法正常運行, 。在這個問題中沒有相關的信息來幫助我們幫助你。 –

+0

什麼是相關的和有幫助的? @HansPassant – Snappawapa

+0

http://stackoverflow.com/help/mcve –

回答

2

我見過這個問題 - 和其他人有太多: C# app runs with debugging, but not without

這裏有一些想法。 最有可能當應用程序啓動時,嘗試實例化主窗體時失敗。如果您在Visual Studio中運行,它可能會自行修復您創建的問題,並使您認爲它將通過雙擊EXE來運行。

  1. 看看你的Windows主窗體的構造函數。
  2. 查看窗口窗體的OnLoad。
  3. 在Program.cs文件中設置一個斷點,在該文件中實例化主表單,然後進入表單代碼 - 在Visual Studio中使用F5運行,以便它運行調試副本。
  4. 從您的Program.cs和您的主窗體構造函數和OnLoad方法發佈代碼,以便我們可以看到它。

編輯

的RefreshForm()的代碼是99%最有可能的問題。需要查看該代碼,但我敢打賭,如果你評論該應用將運行的那一行。

+1

感謝您的建設性答案,我發佈了所需的代碼,並嘗試使用斷點進行調試。我沒有注意到任何異常 – Snappawapa

+0

好的,所以RefreshForm()可能是99%的問題。在表單構建之前,你正在做某件事。請發佈該代碼或將其發佈出來,然後重試。你會被修復的。 – raddevus

+0

我剛試過'refreshForm()'出來,沒有任何改變, – Snappawapa

1

我會做的第一件事是採取RefreshForm()方法,並把它放在一個OnLoad事件,包裹在一個try..catch塊

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

這樣,如果RefreshForm是問題,那麼你將得到原因,應用程序至少會啓動。

如果你沒有看到消息框,那麼它是更基礎的東西。

+0

你也可以用消息框清理你的應用程序,當你剛剛開始使用應用程序時,看到消息說明它到了什麼階段。這會給你一個麪包屑來追蹤這個問題。 –

+0

我剛剛嘗試了onload中的try/catch,即使在調試之外運行,也不會捕獲並顯示錯誤。 (並且我知道,從調試運行時窗體也很新鮮)。一切運行良好,除非在調試之外運行,它根本不運行,看起來 – Snappawapa

+0

@Snappawapa是的,這是我的預期。你無法捕捉到異常。這是一個雞/蛋的問題:哪一個最先?在Form完全構造之前,您正試圖在refreshForm()調用中執行一些操作。你難以評論這條線嗎?告訴我們該代碼,我可以更具體地告訴你它爲什麼發生。我見過這種類型的代碼在衆多機器上運行,然後失敗了一臺機器。這是一個計時的事情 - 但你的代碼必須改變。時機是爲什麼它在VSTudio中工作 - 它會自我修復它。 – raddevus

-1

所以很顯然以供將來參考,有什麼問題解決了:

  1. 刪除功能與構造函數和的onload表單元素播放時,它移動到昂秀事件綁功能
  2. 清理和重建一切。
  3. 我還需要添加「從'項目名稱'運行時間實現''和'本地項目名稱'本地化資源'」,以便運行。 (這在我遵循的指南中沒有詳細說明)