2011-07-27 39 views
1

雖然我試圖修改安裝程序使用自定義操作,但我在C#世界很新。我想要做的是安裝完成後運行批處理腳本。我正在使用以下安裝程序類:錯誤與自定義操作在Visual Studio 2008中

namespace PostInstall 
{ 
    [RunInstaller(true)] 
    public partial class Installer1 : Installer 
    { 
     public Installer1() 
     { 
      InitializeComponent(); 

      System.Diagnostics.Process.Start("PostInstall.bat"); 
     } 
    } 
} 

名爲PostInstall的項目包含帶有上述代碼的* .cs文件。該項目是在this link的「創建自定義操作」部分創建的。在安裝項目中,我在安裝&提交節點中添加了PostInstall項目的主要輸出,如鏈接中所述。

在安裝時收到以下錯誤的端部

然而:

錯誤1001無法創建一個實例PostInstall.Installer1 安裝型 - >異常已由 調用目標拋出。 - >系統找不到指定的文件。

我驗證了PostInstall.bat存在於安裝目錄中。爲什麼錯誤正在發生以及如何解決?

+0

爲什麼不在致命事件上調用PostInstall.bat? – CharithJ

+0

然後我得到另一個錯誤。我的想法是如果構造函數被調用,那麼批處理應該被執行。 – Donotalo

回答

2

我想安裝目錄是不會自動在其中安裝程序在運行目錄,所以你不能假設Process.Start("PostInstall.bat")會找到批處理文件。

This DevCity article是一個很好的介紹這個話題,並告訴你如何得到傳遞給您的自定義操作對象的安裝目錄,這樣就可以創建一個批處理文件的完整路徑。

你有沒有想過批處理文件運行時會發生什麼?在繼續安裝的下一個階段之前,你是否想要等到它完成?

+0

批處理文件只是改變安裝目錄的權限。我假定批量填充將從安裝目錄中調用。它由安裝程序複製到那裏。 – Donotalo

+0

@Donotalo - 希望有所幫助,如果你知道「我認爲」是世界上最危險的短語之一,將來會幫助你更多! – AAT

+0

我已經替換了整個技術。我有c,C++&win32背景。我用C++程序替換了自定義操作,並在安裝項目的提交節點中添加了該操作。有效。 :)鏈接是可怕的,謝謝你分享它。我在這個過程中學到了很多東西。 :) – Donotalo

0

理想的自定義操作應該寫在本地代碼,如果它不可能在你的情況下嘗試運行.msi以管理員身份

相關問題