Visual Studio 2008安装程序项目 - 自定义操作未触发

时间:2008-11-26 19:26:33

标签: windows visual-studio visual-studio-2008 windows-installer

我似乎无法使用自定义操作。我可能做错了。这就是我想要做的事情:

我想在运行可执行文件的应用程序安装(Visual Studio Installer项目)中运行自定义操作。可执行文件只执行一些system.io文件复制任务,并且我已经确认可执行文件在单独运行时运行正常。

  1. 我创建了安装程序项目
  2. 将exe添加到应用程序文件夹
  3. 转到自定义操作并将exe添加到“提交”步骤
  4. InstallerClass设置为true
  5. 然后安装程序,没有得到我希望的结果。所以我添加了一行来写入Windows日志。再次运行安装程序后查看Windows日志,看起来它没有运行。添加了debug.break到exe代码Unisntalled /重新安装我的安装程序,没有任何反应。我终于坐下来看着进程并确认exe永远不会被执行。
  6. 有什么想法吗?

    目标系统: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
    

    我没有打电话给那个人。我之前从未使用过Installer类。我可能会在这里做一些非常新秀的事情。根据您的说明,我已经在我安装期间要运行的exe中添加了下面粘贴的代码。我将exe添加到我的应用程序文件夹,然后将其添加到Commit自定义操作中。现在这里是我正在尝试运行的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不会运行我想要的代码。

3 个答案:

答案 0 :(得分: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 :(得分:2)

你在调用基本方法吗?

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

答案 2 :(得分:0)

InstallerClass
属性设置为'false'。