在 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 文件。这是棘手的部分:
- 我需要修改 Program Files 中的文件(需要提升权限)
- 我需要在复制后但在服务启动前修改它们
- 我们不想要求安装 运行 作为管理员
我们对将 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'
属性。
我有一个 WiX 项目,它安装了一些 Windows 服务,这些服务是用 .NET 6 编写的。它们各自在 Program Files 的目录中都有一个 appSettings.json 文件。在安装 UI 期间,我需要询问用户一个问题并使用该问题的答案更新 appSettings.json 文件。这是棘手的部分:
- 我需要修改 Program Files 中的文件(需要提升权限)
- 我需要在复制后但在服务启动前修改它们
- 我们不想要求安装 运行 作为管理员
我们对将 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'
属性。