【问题标题】:How to prevent a Windows user from being removed and created during a patch如何防止 Windows 用户在补丁期间被删除和创建
【发布时间】:2014-07-18 17:06:33
【问题描述】:

我有一个项目,它使用 WiX 扩展 WixUtilExtension 为我们的 Windows 服务创建用户。当我修补安装(使用 .msp)时,将执行自定义操作 RemoveUser 和 CreateUser。

我不希望这些 WiX 扩展创建的自定义操作在补丁期间运行。

我可以直接在MSI 的 InstallExecuteSequence 表中的自定义操作 (ConfigureUsers) 中添加一个条件来防止这种情况,但我还没有找到在 WiX 中处理这种情况的方法。

使用 WiX,如何防止 RemoveUser 和 CreateUser 在补丁期间被执行?

<util:Group Id="LocalAdministrators" Name="Administrators"/>
<DirectoryRef Id="INSTALLLOCATION" DiskId="1">
    <Component Id="CreateServiceAccountUser" Guid="{614550A7-C766-4B5D-9BF9-233D07EB3B69}">

        <util:User Id="ServiceAccountUser"
                   CanNotChangePassword="yes"
                   CreateUser="yes"
                   Disabled="no"
                   FailIfExists="no"
                   LogonAsService="yes"
                   Name="TestUser"
                   Password="testuserpw"
                   PasswordExpired="no"
                   PasswordNeverExpires="yes"
                   RemoveOnUninstall="yes"
                   UpdateIfExists="yes">
            <util:GroupRef Id="LocalAdministrators"/>
        </util:User>

        <RegistryKey Root="HKMU" Key="Software\AMT\WebBrix">
            <RegistryValue Name="CreateServiceAccountUser"
                           Value="Common"
                           Type="string"
                           KeyPath="yes" />
        </RegistryKey>

    </Component>
</DirectoryRef>

【问题讨论】:

    标签: wix wix-extension


    【解决方案1】:

    你可以在 WiX 中做到这一点:

    <InstallExecuteSequence>
        <Custom Action='ConfigureUsers' 
                After='InstallFinalize'>NOT Installed</Custom>
    </InstallExecuteSequence>
    

    这里还有一些条件

    1. 操作仅在安装期间运行 条件:未安装且未修补
    2. 操作仅在删除 MSI 期间运行 条件:移除
    3. 在安装和修复期间运行操作 条件:不删除
    4. 在安装和删除期间运行操作 条件:必须没有条件
    5. 操作调用由 MSI 安装的 EXE 条件:未安装且未修补
    6. 仅在初始安装时运行: 未安装
    7. 在初始安装或选择修复时运行。 未安装或 MaintenanceMode="Modify"
    8. 从命令行卸载或添加/删除菜单时运行。 REMOVE~="All" 或 MaintenanceMode="Remove"

    【讨论】:

    • 这会覆盖 wix 自定义操作直接写入 msi InstallExecuteSequence 表的条目吗? InstallExecuteSequence 标记中没有此自定义操作的条目。看起来 wix 自定义操作将其直接添加到 msi InstallExecuteSequence 表中。
    • 如果我理解正确,那么不,这只是指定何时以及是否应该采取行动。
    • 也许更清楚一点:我使用 wix WixUtilExtension 库创建用户,并没有将 ConfigureUsers 自定义操作的条目添加到 InstallExecuteSequence 标记。在我检查表之前,我不知道这个自定义操作是在没有条件的情况下创建并直接添加到 msi InstallExecuteSequence 表中的。我接受了您的建议,并将 ConfigureUsers 自定义操作的条目添加到 InstallExecuteSequence 标记并重建了 msi。 msi InstallExecuteSequence 表中的现有行已更新为包含条件。
    • 我以为我在添加了您建议的 CA 条件后解决了这个问题:未安装 ConfigureUsers CA 和它调用的其他自定义操作被定义为 inscript 并立即运行,但是当我添加您建议的条件时,它们执行延迟并出现错误:“DEBUG:错误 2762:无法安排操作。必须在 InstallInitialize 之间安排该操作和 InstallFinalize。”我想我又回到了我开始的地方。我不需要在补丁上运行这些 CA
    • 我想我找到了。 未安装需要“Before='InstallFinalize'”
    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多