在 WiX 中,在启动服务之前更新 windows 服务 appSettings.json

In WiX, update a windows service appSettings.json before starting services

我有一个 WiX 项目,它安装了一些 Windows 服务,这些服务是用 .NET 6 编写的。它们各自在 Program Files 的目录中都有一个 appSettings.json 文件。在安装 UI 期间,我需要询问用户一个问题并使用该问题的答案更新 appSettings.json 文件。这是棘手的部分:

  1. 我需要修改 Program Files 中的文件(需要提升权限)
  2. 我需要在复制后但在服务启动前修改它们
  3. 我们不想要求安装 运行 作为管理员

我们对将 appSettings.json 文件放置在安装将具有写入权限的其他目录中的想法持开放态度,但我不知道那会在哪里。它不应该是特定于用户的,因为这些是 运行 as System.

的服务

我有一个 CA 试图修改文件,但失败了,因为我没有写权限。

这是我目前为我的 CA(C# DLL)准备的内容:

<CustomAction Id="UpdateConfigJson" Impersonate="yes" BinaryKey="MyCustomAction" DllEntry="UpdateConfigJson" Execute="deferred" Return="check"  />

<CustomAction Id="SetCADataProp" Property="UpdateConfigJson" Value="Arg1=[VALUE1];Arg2=[VALUE2]" />

    <InstallExecuteSequence>
        <Custom Action="SetCADataProp" Before="UpdateConfigJson"/>
        <Custom Action="UpdateConfigJson" Before="StartServices" />
    </InstallExecuteSequence>

SetCADataProp CA 允许将安装程序属性传递到我的延迟 CA。

除了我在尝试写入文件时获得权限失败外,其他一切正常。

这个问题更像是一个概念性的问题:是否有一个已知的程序来执行此操作(因为这听起来并不罕见),或者是否有将文件放在其他地方的解决方案?

谢谢!

如果您想写入提升的位置(如 ProgramFilesFolder),则不要让您的自定义操作模拟 logged-in 用户,即删除 CustomAction/@Impersonate='yes' 属性。