【问题标题】:Visual Studio Setup, Custom Action to copy the setup fileVisual Studio 设置,自定义操作以复制设置文件
【发布时间】:2014-08-04 05:10:28
【问题描述】:

我正在开发一个视觉工作室设置项目。到目前为止一切都很好,除了卸载。该程序没有创建自己的卸载程序,而是卸载功能位于 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 文件放在哪里让它工作?很困惑。

【问题讨论】:

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


    【解决方案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 进程的调用。这意味着需要指定完整路径,并且对配置文件特定项目(如桌面、用户配置文件位置)的任何使用都将失败。

    【讨论】:

      【解决方案2】:

      这个类应该放在你的应用项目中。我相信它可以包含在任何 DLL 由 setup 项目打包的项目中,但通常将它放在 application 项目中最有意义。

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

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

      这个问题可能会帮助您更多地了解自定义操作:

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

      【讨论】:

      • 好吧,这是有道理的。等等,我不能只添加一个 .cs 文件。我应该用vbs写吗?
      • 如果你的项目是 VB 而不是 C# 那么是的,你可以用 VB 编写它。当您向项目添加项目时,应该有一个安装程序类模板。这将帮助您入门。
      • 那么您应该可以添加一个 C# 安装程序类。或者,至少是一个 .cs 文件。为什么你不能?确保将其添加到您的应用程序项目中,而不是您的设置项目中。
      • 好吧,我明白了。所以我添加了安装程序类并编写代码。我用自定义操作调用它。是否也可以调用我的主应用程序项目,但使用“卸载”参数说,然后如果该参数通过,让我的程序执行操作?
      • Installer 类有一个Uninstall 方法,可让您在卸载期间执行自定义操作。查看this question 了解如何将卸载选项添加到您的安装程序。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多