4

我似乎無法獲得自定義操作。我可能做錯了。以下是我想要做的:Visual Studio 2008安裝程序項目 - 自定義操作未觸發

我想在運行可執行文件的應用程序安裝(Visual Studio Installer項目)中運行自定義操作。可執行文件只是執行一些system.io文件拷貝任務,並且我已經證實,可執行文件本身運行時可以完美運行。

  1. 我創建安裝項目
  2. 添加的EXE的程序文件夾
  3. 去自定義操作,並且增加了exe文件,以提交步驟
  4. InstallerClass設置爲true
  5. 冉安裝程序,沒有得到我期待的結果。所以我添加了一行來寫入Windows日誌。在再次運行安裝程序後查看Windows日誌,看起來好像沒有運行。添加了一個debug.break exe代碼Unisntalled /重新安裝我的安裝程序並沒有發生任何事情。我終於坐下來觀看過程,並確認exe永遠不會被執行。

有什麼想法?

有針對性的系統:Windows XP,Vista中 的Visual Studio版本:2008 SP1 語言:VB.NET 有針對性的框架:2.0


優秀。感謝您發佈的代碼,我想我會越來越近。我將它轉換爲VB,我得到這個錯誤:無法找到myexename.savedstate。我假設我應該向你發佈的潛艇傳遞一些東西,但我不知道是什麼。 (順便說一句,這是一個控制檯應用程序),我加入到System.Configuration.Install.dll參考,這裏是我的代碼:

 

Imports System.ComponentModel 
Imports System.Configuration.Install 

_ 
    Public Class ApplicationInstaller 
     Inherits Installer 
     Public Overloads Overrides Sub Commit(ByVal savedState As IDictionary) 
      ' Do some work on commit 
      The_Sub_I_Want_To_Run() 
     End Sub 
     Public Overloads Overrides Sub Install(ByVal stateSaver As IDictionary) 
      ' Do some work on install 
     End Sub 
     Public Overloads Overrides Sub Uninstall(ByVal savedState As IDictionary) 
      ' Do some work on uninstall 
     End Sub 
    End Class 

我沒有調用。我從來沒有使用過安裝程序類。我可能在這裏做一些非常新手。根據你的指示,我已經添加了我在安裝期間運行的exe文件中粘貼的代碼。我將該exe文件添加到我的應用程序文件夾中,然後將其添加到提交自定義操作中。現在,這裏是我的代碼現在已經在我的exe文件的來源,我試圖運行:

 
    _ 
    Public Class ApplicationInstaller 
     Inherits Installer 
     Public Overloads Overrides Sub Commit(ByVal savedState As IDictionary) 
      ' Do some work on commit 
      The_Sub_I_Have_my_codein() 
      MyBase.Commit(savedState) 
     End Sub 
     Public Overloads Overrides Sub Install(ByVal stateSaver As IDictionary) 
      ' Do some work on install 

     End Sub 
     Public Overloads Overrides Sub Uninstall(ByVal savedState As IDictionary) 
      ' Do some work on uninstall 
     End Sub 
    End Class 
 

嗯...在exe文件的項目屬性我點擊「登錄大會「和錯誤已經消失。但是,看起來像exe不運行我想要的代碼。

+0

Visual Studio部署項目很爛並且無疑會導致您的問題。改用WiX。 – erikkallen 2010-03-29 12:05:37

回答

8

EXE或圖書館要添加到提交步驟應包含Installer一類派生並標有RunInstaller屬性如下:

[RunInstaller(true)] 
public class ApplicationInstaller : Installer 
{ 
    public override void Commit(IDictionary savedState) { 
     // Do some work on commit 
    } 
    public override void Install(IDictionary stateSaver) { 
     // Do some work on install 
    } 
    public override void Uninstall(IDictionary savedState) { 
     // Do some work on uninstall 
    } 
} 

希望這有助於。

+1

[RunInstaller(true)]非常重要。 – Amitd 2010-03-10 06:04:33

2

你在調用基本方法嗎?

public override void Commit(IDictionary savedState) { 
    // Do some work on commit 
    base.Commit(savedState); 
} 
0

設置

InstallerClass
屬性爲'false'。

相關問題