c# - 如何创建一个用 C# 编写的独立、自包含的安装程序?

标签 c# installation

我有一个具有复杂设置要求的应用程序。我非常熟悉一些用于创建安装程序的工具,例如 Wix、Visual Studio 安装项目、Inno-setup 和第三方工具。然而,对于这个特定的应用程序,我已经确定我需要用 C# 从头开始​​编写安装程序,而不是使用任何这些工具。 Joel表达的一些推理适用于此处,除了我想在 C# 而不是 MFC 中执行此操作。

无论如何,我的问题是:我将如何着手创建一个可以包含一组在运行时提取的文件的 .NET 可执行文件?在这种情况下,exe 是安装程序,文件是它需要安装的程序文件。此外,如何使程序完全独立可执行,即即使我正在使用一些外部程序集(我自己的以及第 3 方)我希望它们一起打包到一个 EXE 中(在 C/C++ 本地世界中这是通过静态链接完成)。

更新

这是我目前使用的方法,除非有人提出更好的建议,否则我会坚持使用:

  • 创建了一个 XML list 文件,其中包含所有文件的列表以及包含我的安装程序正在安装的应用程序的文件夹结构。我将此文件添加到安装程序的 VS 项目中。
  • 用 C# (zipfiles.exe) 编写了一个工具,它获取 list XML 并创建一个包含所有文件的 zip 文件。这个工具使用了很棒的 DotNetZip用于创建 zip 的库。
  • 向我的安装程序项目添加了预构建操作,该操作使用 list XML 启动 zipfiles 工具并在项目文件夹中输出 zip 文件 (Files.zip)。
  • 在我的安装程序项目中添加了 Files.zip 作为嵌入式资源。
  • 我的安装程序在运行时提取嵌入式 zip 并将其解压缩到应用程序的目标安装文件夹(再次使用 DotNetZip)
  • 向使用 ILMerge 的安装程序项目添加了构建后操作将其使用的所有外部程序集捆绑到 exe 中的工具。

我现在有一个用于安装程序的 VS 项目,它构建了一个独立的 exe,其中嵌入了安装所需的所有文件。当正在安装的应用程序的文件列表发生变化时,我只需更新 list XML 并重新构建。

现在我可以专注于其余的设置逻辑!

最佳答案

只需创建一个标准的 Visual Studio 安装项目,其中只包含一个 custom install action .

这实际上是一个标准的 .NET dll 程序集,您可以在其中运行安装和卸载应用程序所需的任何代码。

它的存在正是出于您提到的原因,即当您的应用程序。需要比标准安装程序提供的更复杂的安装和卸载步骤。

关于c# - 如何创建一个用 C# 编写的独立、自包含的安装程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1672339/

相关文章:

javascript - Web 浏览器未运行 javascript

neo4j - 在 redhat 6.x 上安装 Neo4j 2.1

python - 在 Windows 7 64 位 PC 上安装 PIL

linux - 在 Linux 上哪里安装 Mercanet Payment Lib

c# - 写入文本文件并读取该文本文件

c# - 在 DllImport 中使用 Unicode 字符串和用 Rust 编写的 DLL

c# - Entity Framework 以错误的顺序插入子对象

c# - 安装项目 COM 注册

r - 安装 dplyr 给了我旧版本

c# - 在 WPF 窗口中完全删除标题栏的上下文菜单