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

4
我似乎无法使一个自定义操作起作用。我可能做错了。这就是我的尝试:
我想在我的应用程序安装(Visual Studio Installer项目)中运行一个自定义操作,以运行可执行文件。该可执行文件只是进行一些系统.io文件复制任务,我已经确认当单独运行该可执行文件时,它完美地工作。
我创建了安装程序项目,并将exe添加到应用程序文件夹中;进入自定义操作并将exe添加到Commit步骤中;设置InstallerClass为true;运行安装程序,没有得到我希望的结果。因此,我添加了一个写入Windows日志的行。再次运行安装程序后,在Windows日志中查看,发现似乎没有运行。向exe代码添加了debug.break。卸载/重新安装我的安装程序,什么也没有发生。最终,我坐下来观察进程并确认可执行文件从未被执行过。
有哪些想法吗?
目标系统:Windows XP、Vista Visual Studio版本:2008 Sp1 语言:VB.NET 目标框架:2.0
非常好。我认为我通过您发布的代码正在接近。我将其转换为VB,但我遇到了这个错误:找不到myexename.savedstate。我假设我应该传递一些东西给你发布的子程序,但我不知道是什么。(顺便说一句,这是一个控制台应用程序)我添加了对System.Configuration.Install.dll的引用,以下是我的代码:
我没有调用它。我以前从未使用过Installer类。我可能在这里做了一些非常新手的事情。根据您的指示,我已经添加了我想要在安装期间运行的exe中粘贴的代码。我将该exe添加到了我的应用程序文件夹中,然后将其添加到Commit自定义操作中。现在这是我现在在我试图运行的exe源码中拥有的代码:
  _
    公共类ApplicationInstaller
        继承 Installer
        公共重写子过程 Commit(ByVal savedState As IDictionary)
            ' 在提交时执行一些操作
            The_Sub_I_Have_my_codein()
            MyBase.Commit(savedState)
        结束子过程
公共重写子过程 Install(ByVal stateSaver As IDictionary) ' 在安装时执行一些操作
结束子过程
公共重写子过程 Uninstall(ByVal savedState As IDictionary) ' 在卸载时执行一些操作 结束子过程 结束类

嗯...在exe的项目属性中,我点击了“签名程序集”,并且错误已经消失了。不过看起来这个exe并没有运行我想要的代码。


Visual Studio 部署项目不太好用,而且无疑会给你带来问题。建议使用 WiX 代替。 - erikkallen
3个回答

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

2

你是否在调用基础方法?

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

0

Set

InstallerClass
property to 'false'.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接