2014-10-31 76 views
0

我遇到了一個很大的問題。我正在寫一個WFA + C++/CLI DLL應用程序。一切工作正常,直到我不得不將它發送給我的朋友。每次他從bin/debug(+附加的dll和xml文件)執行exe文件時都不會發生任何事情(他沒有安裝Visual Studio)。這個問題不會發生在我身上。在我的電腦上一切正常。Windows窗體應用程序不能在另一臺PC上運行

我注意到什麼(後夫婦仰視的解決方案小時)的,不知怎的,這是關鍵時刻:

log = new StreamWriter("log.txt", true); 
log.WriteLine("3c"); 
log.Close(); 

materialTypeComboBox.SelectedIndex = 0; 

log = new StreamWriter("log.txt", true); 
log.WriteLine("3d"); 
log.Close(); 

「3C」是在每一個我的朋友執行時間我簡單的日誌文件的最後一行這個。如果我評論此,應用程序崩潰的

foreach (RadioButton item in someGroupBox.Controls.OfType<RadioButton>()) { ... } 

好像WFA的控制會導致效果,但怎麼可能? 我嘗試了使用installShield項目(在發送應用程序時錯過了一些引用),一鍵安裝程序,創建空的時候,將目標框架窗體3.5更改爲4.5.1,在Debug和Relase模式下構建項目,x86,x64項目和粘貼源 - 沒有任何成功。

這怎麼可能?沒有例外,沒有消息框,什麼都沒有。只需單擊並沒有任何反應。 有誰知道一些解決方案?

+2

** A **不程序在啓動後立即退出?檢查任務管理器。 ** B。**檢查事件查看器,系統應該在某處記錄日誌。 – kennyzx 2014-10-31 01:28:51

回答

1

Windows窗體因其能夠靜默吞下異常而聞名。我強烈建議記錄未處理的異常。記錄未處理的異常,請執行下列操作:

Application.ThreadException += new ThreadExceptionEventHandler(UnhandledUIException); 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledException); 


private static void UnhandledUIException(object sender, ThreadExceptionEventArgs e) 
{ 
    // Log exception 
} 

private static void UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
    // Log exception 
} 

信息:http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

信息:http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx

+0

它有點幫助。現在我意識到,這不是WFA控件的問題,而是我懷疑的問題,但導入了非託管DLL。 – kastelika 2014-10-31 23:20:37

+0

現在的問題是,當我像以前一樣調用DLL中啓動的方法 - 沒有任何反應,但catched exeption說: 無法加載DLL「mydll.dll」(模塊無法找到HRESULT:0x8007007E) 但是當我第一次加載整個表單,然後點擊按鈕調用方法,它沒有拋出任何異常,但也沒有計算。 – kastelika 2014-10-31 23:37:36

+0

谷歌搜索它,發現通常是x86/x64 DLL /應用衝突,但它不能,因爲我使用Win32/x86配置構建每個項目。 還有什麼小竅門? – kastelika 2014-10-31 23:38:13

-1

解決:

的問題是與DLL - 與Dependency Walker中我發現我的DLL需要運行msvcr120.dll,甚至包括它到項目輸出文件夾沒有幫助,而且msvcr導致x84/x64不匹配錯誤。重新編譯DLL解決問題:

靜態鏈接DLL 請確保您解決它的版本和調試。步驟略有不同。

Release

在Visual Studio中,我去了項目Properties。我將我的配置更改爲 。我去了配置屬性| C/C++ |代碼生成查看運行時庫設置。它設置爲 :多線程DLL(/ MD)將其更改爲: 多線程(/ MT)重建。調試幾乎與 版本完全相同。

調試

在Visual Studio中,我去項目屬性。我將我的 配置更改爲調試。我去了配置屬性| C/C++ |代碼生成查看運行時庫設置。它被設置爲 這一點:多線程調試DLL(/ MDD),將其更改爲這樣: 多線程調試(/ MTD)重建調試

http://www.rhyous.com/2010/09/16/avoiding-the-msvcr100-dll-or-msvcr100d-dll/

相關問題