C# 使用InstallUtil.exe安装windows服务两次会造成状态管理问题

C# 使用InstallUtil.exe安装windows服务两次会造成状态管理问题,c#,windows-services,C#,Windows Services,我已经在C#中创建了Windows服务。我还维护了一个状态,以便在卸载某些参数时将其还原。我已经编写了如下代码 protected override void OnAfterInstall(IDictionary savedState) { SaveInitState(savedState); base.OnBeforeInstall(savedState); } protected override voi

我已经在C#中创建了Windows服务。我还维护了一个状态,以便在卸载某些参数时将其还原。我已经编写了如下代码

    protected override void OnAfterInstall(IDictionary savedState)
    {   
            SaveInitState(savedState);
            base.OnBeforeInstall(savedState);

    }
    protected override void OnAfterUninstall(IDictionary savedState)
    {       
            RestoreState(savedState);
            base.OnAfterUninstall(savedState);
    }
当我安装服务,然后使用InstallUtil.exe取消安装时,我的代码工作得非常好。i、 e.状态已正确恢复

但我对下面的场景有疑问。 如果我先安装服务,然后再尝试重新安装,它会给我错误“服务已经存在”,这是正确的。但当我在上一步后卸载它时,服务将正确卸载,但在这种情况下,我的状态不会恢复


我的猜测是,在上述场景中,卸载后被重写的函数未调用。我还使用此函数中的事件日志对此进行了验证。

那么回滚呢?您是否也在AfterRollback上调用SaveInitState状态?或者,如果执行了回滚,可能会删除保存的状态(或恢复以前的状态)?可以猜测,失败的第二次安装正在调用OnAfterInstall,这将覆盖以前保存的状态。在覆盖之前,您可能需要检查是否已保存状态。OnAfterInstall不会调用第二次安装。我用日志验证了它。