Windows 安装程序 (MSI) 不复制配置文件

Windows installer (MSI) does not copy a config file

我安装了一个 MSI buillder tool on my visual studio 2017 and started deploying my desktop application with generated MSIs. The istaller is able to copy vital files and adds registery keys but it does not copy some additional config files which are required for logger. According to this page,将 "Copy to Output Directory Property" 切换到 "Copy always" 应该可以解决这个问题,但是它仍然没有将配置文件复制到客户端计算机上的输出目录中。

有人可以提供有关如何诊断此问题的建议吗?

编辑:

我想我可以使用以下方法将日志文件显式添加到 MSI,但我对此有两个顾虑。我会使用全局路径或相对路径将文件添加到 MSI 中吗?其次,这会是一个好习惯吗?

编辑 2:

供有相同问题的开发者参考,貌似是上面的方法添加文件的相对路径。我在源代码管理中添加了差异页面的屏幕截图。

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

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

此外,复制到输出目录的内容与 MSI 文件的构建无关。据我所知,它的主要原因是允许您在代码的输出构建位置拥有所有依赖项,以便程序从该位置正确运行,并且它恰好让您有机会获得所有文件从同一个地方进入一个设置。它并不意味着 "copy this file somewhere in such a way that it is automatically included in the MSI build and the deployed on the target system"。

一旦您让 MSI 工作并安装了配置文件,您可以 运行 进入 Windows 安装程序文件覆盖规则,以防止您覆盖在安装后更新的文件。