C# 删除安装程序的windows服务不起作用

C# 删除安装程序的windows服务不起作用,c#,windows-installer,C#,Windows Installer,我正在尝试卸载windows服务,但收到以下消息 所以我想好了,它被删除了。但当我检查我的服务窗口时,它仍然在那里。。有人知道我做错了什么吗?我将在下面附上我的代码 [RunInstaller(true)] public partial class ProjectInstaller : System.Configuration.Install.Installer { public ErrorLogging errLog { get; set; } public ProjectI

我正在尝试卸载windows服务,但收到以下消息

所以我想好了,它被删除了。但当我检查我的服务窗口时,它仍然在那里。。有人知道我做错了什么吗?我将在下面附上我的代码

[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer
{
    public ErrorLogging errLog { get; set; }
    public ProjectInstaller()
    {
        errLog = new ErrorLogging();
        InitializeComponent();
    }

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

        try
        {
              /* Some folder creation happens here */
        }
        catch (InstallException ex)
        {
            errLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Creating directories failed");
        }
    }
    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
    }

    public override void Uninstall(IDictionary savedState)
    {
        base.Uninstall(savedState);
    }
}
我所尝试的:

  • 重新启动
  • 删除安装程序类,但MSI安装程序不执行我的检查

假设您的问题不是关于代码,您只是试图从该机器上删除服务:

  • 可能需要一个提升的命令提示符(如果您不知道如何打开它,)
  • 如果没有帮助,则会有一个服务删除命令:

    sc删除ServiceName


  • 从您的代码中可以看出,您只是想卸载,但如果使用InstallUtil,无论出于何种原因,它都会失败

    但有其他解决方案可以删除服务:

    选项1:(sc.exe) 打开命令提示符(您可能需要以管理员身份打开它并执行:

    sc delete ServiceName
    
    注意:如果服务名称包含一些空格,则需要将其换行:

    sc delete "My service name with spaces"
    
    选项2:(Regedit) 打开注册表并导航到:HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services

    在此处找到您的服务,删除它并重新启动系统


    这是两个选项,您必须在不使用InstallUtil的情况下删除服务。MSI不做任何检查,因为您正在退出进程,并且不使用本机MSI功能。如果您使用内置的ServiceInstall和ServiceControl表,而不是重新发明轮子,安装程序将更简单、更可靠。

    您是否需要你的错误日志记录是否一直有效?因为如果它崩溃了…那么,它会崩溃。除了日志记录之外,你的所有内容都在尝试捕获中。是的,我在错误日志中做了我能想到的所有检查,这样我就不会崩溃代码中有一个错误,表明卸载可能拾取了不正确的savedstate文件。另一个pos卸载失败的可能原因是你需要先停止它的运行。你知道为什么它不能用InstallUitl删除吗?我从过去的it中确实记得,当服务窗口打开时,它可能会失败。但我暂时无法测试。谢谢你的帮助只是出于好奇,有什么帮助?sc.exe或regedit或clos使用InstallUtil?sc.exe卸载服务时关闭服务窗口会有所帮助,但在尝试卸载服务时关闭了服务窗口