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'。

相关问题