代码之家  ›  专栏  ›  技术社区  ›  user3079364

Windows installer(MSI)不复制配置文件

  •  0
  • user3079364  · 技术社区  · 6 年前

    我安装了 MSI buillder 工具,并开始使用生成的MSI部署我的桌面应用程序。istaller能够复制重要文件并添加注册表项,但它不会复制记录器所需的一些其他配置文件。根据这个 page ,将“Copy to Output Directory Property”(复制到输出目录属性)切换为“Copy always”(始终复制),以解决问题,但它仍然不会将配置文件复制到客户端计算机上的输出目录中。

    The file is not being copied to output file in client's computer

    有人能给我一个建议,告诉我如何诊断这个问题吗?

    编辑:

    我认为我可以使用以下方法将日志文件显式添加到MSI中,但我对此有两个顾虑。我会将文件添加到MSI中,并使用其全局路径还是相对路径?其次,这是否是一种良好的做法?

    enter image description here

    编辑2:

    对于有相同问题的开发人员的参考,似乎上面所述的方法添加了带有相对路径的文件。我在源代码管理中添加了差异页面的屏幕截图。

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  1
  •   PhilDW    6 年前

    将单个文件添加到VS安装项目是完全正常的。每个生成MSI的工具都是这样工作的。VS设置可能是其“项目输出”类型输入选择的例外,您对将要安装的实际文件知之甚少。因此,您可以通过单独添加每个文件(包括配置文件)来获得对MSI内容的最佳控制。此外,有些文件实际上不属于应用程序文件夹(默认为程序文件),因为它们是属于类似于用户应用程序数据的数据文件。

    MSI构建获取其文件的路径与该文件在目标系统上的部署位置无关。通过使用目标计算机上的文件系统视图,可以告诉MSI内部版本将在目标系统上部署文件的位置,从中可以获得要向其中添加文件的目标文件夹列表。

    此外,复制到输出目录的内容与MSI文件的构建无关。据我所知,它的主要原因是允许您在代码的输出构建位置拥有所有依赖项,以便程序可以从该位置正确工作,并且它正好给您机会从同一位置将所有文件放入设置中。这并不意味着“将此文件复制到某个位置,使其自动包含在MSI构建中并部署在目标系统上”。

    一旦MSI正常工作并安装配置文件,您可能会遇到Windows Installer文件覆盖规则,这些规则阻止您覆盖安装后更新的文件。