Visual Studio安装程序,自定义操作以复制安装文件

时间:2014-06-13 15:17:33

标签: c# visual-studio-2010 installation setup-project custom-action

我正在开发一个visual studio安装项目。到目前为止,除卸载外一直都很好。该程序没有创建自己的卸载程序,而是卸载功能在setup.msi中。所以我需要做的是在安装过程中,我需要将正在运行的setup.msi复制到[TARGETDIR]。我能想到的最简单的方法是使用自定义操作。我对自定义操作很遗憾,我不明白他们去哪里,每次我尝试编写一个,它充满了错误。看看其他问题和答案,我想出了以下内容:

[RunInstaller(true)]
public partial class CustomInstaller : System.Configuration.Install.Installer
{
    public override void Install(System.Collections.IDictionary stateSaver)
    {
        base.Install(stateSaver);
        string path = this.Context.Parameters["targetdir"]; 
        // Do something with path.
    } 
}

但我不明白。我看到它是如何通过customactiondata传递的targetdir。但是,RunInstaller是未知的,也不是System.COnfiguration.Install.Installer。我应该把这个.cs文件放在哪里使它工作?很困惑。

2 个答案:

答案 0 :(得分:1)

此类应放在您的应用程序项目中。我相信它可以包含在任何项目中,其DLL由安装项目打包,但通常最有意义的是将它放在应用程序项目中。

确保您的应用程序项目引用System.Configuration.Install.dll。这将解决对Installer

的引用

RunInstaller位于System.ComponentModel命名空间(System.dll)中,因此请确保在类文件的顶部有using System.ComponentModel语句。

此问题可能有助于您更多地了解自定义操作:

  

Why won't my Setup Project Perform my Custom Registration Process

答案 1 :(得分:1)

这可能会帮助您入门,但它不包括安装程序类。

https://www.simple-talk.com/dotnet/visual-studio/getting-started-with-setup-projects/

错误2835是一个虚假错误,与尝试显示一个对话框有关,可能是错误对话框,所以它掩盖了出错的地方,很可能就是你的代码。

使用msiexec / I / l * v创建日志,并在2835之前查找您的错误。

您将targetdir值传递给自定义操作(如参数列表),因此您要说/ targetdir =“[TARGETDIR] \”这是区分大小写并包括括号。它很挑剔,因为它与其他参数合并。

请注意您的代码未在应用程序上下文中运行。这是来自运行系统帐户和sysetm32工作目录的msiexec进程的调用。这意味着需要指定完整路径,并且任何特定于配置文件的项目(如桌面,用户配置文件位置)的使用都将失败。