【问题标题】:Release Windows Forms project without an installer在没有安装程序的情况下发布 Windows 窗体项目
【发布时间】:2012-01-05 18:04:19
【问题描述】:

我已根据发布配置文件进行构建,这会在我的项目的 release 目录中创建一个可执行构建。

如何最好地将此可执行文件分发给客户端?此文件夹中有很多文件在通过安装程序安装时不会出现,例如 mainifest 和一个名为 application.exe.xml 的文件(当 Windows 在 Windows 资源管理器中隐藏扩展时会让人感到困惑)。

这些都是必要的吗?我可以只发送可执行文件吗?还是我需要发送所有文件?有没有办法在没有所有这些文件的情况下进行构建?

【问题讨论】:

  • 首先,如果不使用安装程序,您需要确保客户端安装了正确版本的 .NET。
  • 我认为您需要一个文件来安装项目/解决方案。我的建议是使用 HM NIS 编辑器。使用它并选择所有 .exe 和 .dll 文件。运行 HM NIS 程序时,将进行设置
  • 嗨 oded... 绝对有保证! :p
  • 月光 - 我们的客户无法在他们的机器上安装程序。

标签: c# winforms


【解决方案1】:

您必须发送 EXE 文件和您在本地引用的任何 DLL 文件。如果使用 COM 引用等,则需要在安装过程中进行注册。我认为 GAC 也是如此,但我自己并没有将它用于独立应用程序。

application.exe.config 文件包含应用程序设置(app.config 的副本)。如果您不使用设置或用户通常不关心它们,您可以省略该文件,它将使用您构建应用程序时使用的默认值。

不需要 vshost 文件(如果有的话)。它们由 Visual Studio 的调试器使用。 .pdb 文件包含用于促进 DLL 文件与源匹配的调试数据。除非您打算将调试器附加到应用程序,否则发送这些是没有意义的。

【讨论】:

  • 嗨,Kevin,您似乎对这个主题非常了解。我的应用程序引用的唯一外部框架是 OpenXML 框架(我相信)。我是否需要将此 DLL 打包到包含可执行文件的文件夹中?我已将其添加到项目中引用的库文件夹中。
  • 很好的答案,真的很有帮助,真的简洁易懂。只是为了澄清“你必须发送你在本地引用的 exe 和任何 dll”-> 对我有用的是将 dll 文件放入 release 目录。
  • 在解决方案资源管理器中单击参考,然后按 F4 打开属性。将“复制本地”属性设置为 true,构建过程将为您复制该 dll。
  • 非常感谢您的回答和 cmets,非常有帮助。还有一件事,如果我这样做并创建一个安装程序,我需要撤消它吗?我真正要问的是,始终将外部 DLL 设置为“复制本地”(用于测试等)是否是最好的主意,这会影响创建安装程序的能力吗?
  • 创建安装程序时,您将从发布文件夹发送除 pdbs 和 vshost 文件之外的所有内容。您设置“复制到输出目录”的本地引用和“内容”文件将被安装程序自动拾取。例如,当您更改依赖项时,您不必编辑安装程序项目,并且在编译时会检查所有内容。我发现它使创建安装程序的工作变得更加简单。
【解决方案2】:

通常,在 XCopy 部署中,您必须部署(从字面上复制所有文件部署,无需安装程序/安装程序)输出文件夹的内容(如调试或发布),而无需:

  • *.pdb - 调试符号
  • *.xml - xml 文档
  • ?vshost? - Visual Studio 托管文件

事实上,这也取决于您的具体应用。作为开发人员,您需要知道自己在生产什么;如果您使用的 xml 文件不是 .NET 文档编译器的结果,而是复制到输出文件夹中的静态文件,请不要忘记部署它。

最后一点:开发人员通常会禁用在 Windows 资源管理器中隐藏文件扩展名的选项;-)

【讨论】:

  • 嗨,戴维德。我的扩展程序没有隐藏,但我正在考虑我的客户可能没有可见的扩展程序。无论如何,这就是我所做的,所以我们很快就会看看我是否需要包含任何 dll 或类似的东西! :p
  • 你应该在部署到客户端之前进行测试,只需将要分发的文件放在另一台没有 Visual Studio 的机器上,一台类似于客户端将使用的机器,然后测试你的在那里申请:)
  • 是的,这就是我目前正在做的事情。 :) 原来我需要 OpenXML dll。
  • 很好的答案,非常感谢,非常有帮助。没有提到包含 dll,结果证明这是个问题,所以我给了 kevin 打勾。
  • 我说要部署输出文件夹的内容而不... )
【解决方案3】:

您需要了解安装程序的作用或为什么安装程序很重要。

安装程序负责基本环境。安装程序可以与应用程序一起携带相关的程序集/模块。它还可以在运行之前检查您是否需要某些东西,例如目标机器上的 .NET。它还可以在桌面或开始菜单上创建快捷方式。此外,它还在目标机器上提供了足够的选项来卸载它。

如果您希望单独发布可执行文件,您可能会错过一些可执行文件所依赖的程序集。目标计算机可能安装或未安装正确的 .NET 版本。

【讨论】:

  • 您好,感谢您的信息,但不幸的是,客户的计算机没有正确级别的权限来安装不在允许的软件列表中的程序,因此我们必须自行发送可执行文件。
  • 所以你违反了政策?它更加严重和危险。您正在运送的东西可能不在安全列表中,并且您正在绕过安装策略!
  • 我们没有违反政策。我们正在创建一个不需要访问系统文件、注册表、受保护目录等的程序。这在公司提供的政策范围内,我们正在与公司及其 IT 部门密切合作,以确保我们找到了最简单、最安全的方式来交付可在其系统上使用的可执行程序。
【解决方案4】:

使用程序:来自 HM Soft 的HM NIS EDIT

  • 构建您的项目
  • 运行 NIS EDIT
  • 从向导创建一个新脚本 (Ctrl + W)
  • 运行所有步骤
  • 选择所有 .dll 和 .exe 文件
  • 构建设置文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2015-01-04
    • 2012-10-28
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多