2011-07-12 41 views
2

我一直在寫最近幾周的c#程序,並且文本構建剛剛獲得最終簽收。我通過visual studio發佈了它,將安裝程序包發送給我的客戶端,並且在他們的計算機上無法正常工作。爲了測試的目的,我已經爲自己安裝了完全相同的二進制文件。它是一個以一系列彈出窗口開始的程序,在最終彈出窗口後,程序只是關閉而不是啓動主窗口。我明白,如果不能訪問我的源代碼和我的客戶的計算機故障排除是不可能的,但坦率地說,我甚至不知道從哪裏開始。我可以就什麼事情看一些建議嗎?我們都運行Windows 7,雖然我有64位版本,但我不認爲這應該有所作爲,尤其是在程序開始運行之後。對部署的c#程序進行故障排除

有關從哪裏開始尋找的建議?

編輯 我的解決方案依賴於不出現,直到this.Show()命令(我猜)的節目,在失敗的自定義控制庫。有沒有辦法來檢查,如果這不包括在內,但由於它是建立在我的電腦上,所以參考在那裏工作?我問,因爲發佈按鈕只是將我的項目命名,而不是整個解決方案,但是當我構建它時可以在我的計算機上正常工作,並且項目將庫設置爲其依賴項中的依賴項。

+1

您是否在應用程序中實施了日誌功能?如果沒有,那麼這樣做不會對你有利,因爲這對長期發展是明智的。 –

+0

看事件日誌,有沒有消息? –

+0

您是否正在使用任何不附帶標準.NET運行時框架的外部庫?如果是這樣,所有這些都安裝在目標計算機上? –

回答

2

我建議你看看Windows事件查看器。最有可能的是,它包含一些關於崩潰的有用信息。此外,您可以按照How to: Set Up Remote Debugging中的說明遠程調試您的應用程序。這是我會做的。此外,請嘗試通過訂閱Application.UnhandledException和AppDomain的UnhandledException事件來捕獲應用程序中引發的所有異常。這將允許您獲取調用堆棧。

+0

事件查看器shoudl我們要走了嗎?在應用程序下,我的子視圖是無線局域網,思科,硬件,IE,密鑰管理,媒體中心,微軟,微軟Office Alerts和Windows PowerShell,其中沒有一個聽起來相當有趣...... – humanstory

+1

Windows日誌 - >應用程序 – platon

+0

有一個。由於未處理的異常和KernelBase.dll上的應用程序錯誤導致它關閉的.NET Runtime - 猜測呢? – humanstory

0

你的目標CPU是什麼?也許你已經將它設置爲x64,並且你的客戶端運行在Windows 7的32位版本上。

+0

針對32位,程序啓動它只是不會使它全部進入。 – humanstory

2

如果您可以對應用程序進行更改,那麼您可以嘗試記錄使用Trace輸出引發的任何異常,或使用log4net等專用記錄程序長期記錄。同樣,使用DependencyWalker查看依賴關係可能會很有用 - 如果您在運行時加載了程序集,則可能仍然存在64位問題,您可能會遇到着名的「BadImageFormat」異常。

如果你可以,我還會設置一個Win 7 32位虛擬機來模擬「乾淨」機器上的客戶端環境,這可能有助於重現問題。

編輯澄清跟蹤配置:

你可以在你的app.config中添加跟蹤偵聽器:

<system.diagnostics> 
    <trace autoflush="true" indentsize="4"> 
     <listeners> 
      <add name="LogFileWriter" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\logs\FooApp.log"/> 
     </listeners> 
    </trace> 
</system.diagnostics> 

這將導致在你的程序中的所有語句Trace.Write()寫日誌(前提是您有權寫入配置的文件夾)。

+0

你能鏈接一個資源嗎?我用try/catch包圍了整個MainWindow(默認對象)構造函數,應該在C驅動器上打印一個文件的異常,但沒有喜悅。 – humanstory

+1

@humanstory:添加了跟蹤配置 – BrokenGlass

0
  1. 添加日誌可能,並且(如果它尚未)和「建築師」,它至少爲「簡單」「詳細」記錄,其中:

    簡單:只需公共信息stirng,你將可能需要閱讀

    詳細:只是everythign就可以了,或者有meanning登錄(取決於您的應用程序)

  2. 確保您登錄處理的例外s並且能夠通過標準訂閱AppDomain來處理未處理。
  3. 在每個窗口顯示()和OnClosing()方法添加的(至少在其上懸掛的那些)日誌
  4. 驗證是否OS是一樣上你的構建機器上,並在客戶端
  5. 如果軟件寫somethign的地方,確保你有足夠的previleges做到這一點(簡單的測試,只是問到客戶端運行您的程序作爲管理員
  6. 如果還是不行啓用詳細模式,並在客戶端上運行的應用程序並很快檢查日誌。

或更高版本,你會找到的東西,可能會沒有直接說明你的問題,但一定會幫助你找到解決它正確的方式。

問候。

2

從關於Excel Interop正在使用我的評論MSDN。這可能很明顯,但無論如何。

  1. 您必須在您的系統上安裝Excel爲此代碼才能正常運行。

  2. 要使用COM互操作,您必須具有管理員或高級用戶安全權限。有關安全性的更多信息,請參閱.NET Framework安全性。

在他們例如,它們所使用的下面的代碼。在你的啓動代碼中添加一個類似的檢查可能會很好。 (注意:我從來沒有用過這個東西,所以我對它知之甚少,它純粹是評論和一些在MSDN上搜索的主角)。

0

在與您的情況幾乎相似的情況下,我曾經幫助過的一種方法是在系統內部安裝DebugView,並部署應用程序的調試版本(here's how to trace and debug from C#)。

DebugView將顯示您的程序發出的所有調試消息,這可能會使您很容易找出問題所在。

安裝DebugView和您的應用程序後,客戶端將運行DebugView,確保捕獲活動,然後運行您的應用程序。您的所有調試消息(發送到System.Diagnostics.Debug)將顯示在DebugView中,然後可以由客戶端將其保存到文件併發送給您進行分析。