2014-03-24 125 views
0

我最近使用VS2010在C#中開發了一個Excel COM插件,該插件使用對遠程Web服務的Web引用並向該服務發送數據和從該服務發送數據。一旦完成,按照我的要求,我按照步驟here將其安裝在多臺客戶端計算機上。部署VSTO後,Excel COM加載項崩潰

msi根據規格構建後,我將加載項安裝在外部計算機上。安裝成功完成後,我嘗試啓動excel並崩潰。在進一步調查中,我設法找到了包含這段代碼的Windows錯誤報告(WERInternalMetadata.xml)文件。

<ProblemSignatures> 
    <EventType>CLR20r3</EventType> 
    <Parameter0>excel.exe</Parameter0> 
    <Parameter1>14.0.6126.5003</Parameter1> 
    <Parameter2>505b0834</Parameter2> 
    <Parameter3>AddInTestExcel2007</Parameter3> 
    <Parameter4>1.0.0.0</Parameter4> 
    <Parameter5>53304e03</Parameter5> 
    <Parameter6>42</Parameter6> 
    <Parameter7>16</Parameter7> 
    <Parameter8>System.NullReferenceException</Parameter8> 
</ProblemSignatures> 

當我在Visual Studio上調試我的加載項我沒有得到一個NullReference異常。除此之外,我沒有其他信息說明什麼導致excel崩潰。有人能幫我解釋一下嗎?

編輯 - 外接程序的啓動代碼

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 

} 

private void ThisAddIn_Shutdown(object sender, System.EventArgs e) 
{ 

} 

回答

0

通常,一個Excel加載可以在Excel的啓動時崩潰的原因如下:

  1. 有代碼的開始 - 不包含try/catch 的加載項。
  2. 啓動代碼需要配置或Web服務URL,它們不在預期的文件中。
  3. 的代碼中遇到不同的運行時環境(實際部署的機器)與在Visual Studio環境與預期的權限運行它/辦公室安裝安裝/ .NET版本等

可以請你檢查你的開始通過將它包裝在通用的try/catch塊中尋找可能的異常?

你也可以在這裏張貼片段,我們也可以幫助識別。

p.s.一般建議是如果不是零,則保持啓動代碼的最小值。這是因爲現代版本的Office應用程序如果加載時間超過特定值,實際上會禁用加載項。

+0

感謝您的回覆。我的加載項中的啓動代碼是零。但是我的插件使用了一個app.config,因爲它使用了一個Web服務'ServiceReference1.SNLSoapClient dp1 = new ServiceReference1.SNLSoapClient(「SNLSoap」);'。有些東西告訴我可能是這條線。在我以前的文章和這篇文章之間,我發現我指的是帶有localhost URL的Web服務,當我試圖在其他計算機上安裝插件時,該服務明顯失敗。我更改了URL以獲得完整的IP地址,但後來它在實例化中使用了終點地址,它是app.config的一部分 – Sai

+0

我沒有明確地用msi打包app.config,這是一個需求嗎? – Sai

+0

你在使用app.config文件嗎?如果是,它可能無法在運行時正常工作,因爲加載項在excel.exe上下文下運行。如果你不使用app.config,那麼當然,你不需要打包它們。 –