C# - Windows服务安装程序没有注册服务

时间:2009-07-27 19:56:52

标签: c# windows-services windows-installer setup-deployment

我正在尝试使用Windows服务的安装程序,并且希望避免使用InstallUtil.exe。安装程序似乎正常工作(可执行文件和dll位于正确的目录中),但该服务未显示在“计算机管理”下。

这是我到目前为止所做的:

服务类名称是默认名称 - Service1。

在Project安装程序中,服务安装程序的ServiceName与类名称 - Service1匹配。

在自定义操作下,服务的主要输出已添加到安装,提交,回滚和卸载。

我正在使用http://support.microsoft.com/kb/816169作为参考。

有什么想法吗?

3 个答案:

答案 0 :(得分:15)

您的服务项目是否具有安装程序类?你应该有一个看起来像这样的:

[RunInstaller(true)]
public partial class Service1Installer : Installer
{
    public Service1Installer()
    {
        InitializeComponent();
        ServiceProcessInstaller process = new ServiceProcessInstaller();
        process.Account = ServiceAccount.LocalSystem;

        ServiceInstaller serviceAdmin = new ServiceInstaller();
        serviceAdmin.StartType = ServiceStartMode.Manual;
        serviceAdmin.ServiceName = "Service1";
        serviceAdmin.DisplayName = "Service1";
        serviceAdmin.Description = "Service1";

        Installers.Add(serviceAdmin);
    }
}

答案 1 :(得分:3)

确保您已在服务项目中创建了ServiceInstaller和ServiceProcessInstaller类。 (查看this link了解更多信息)。

关闭计算机管理和“服务”窗口,再次运行安装程序,然后重新打开“服务”窗口。

如果不起作用,请重新启动计算机。您可能锁定了一些文件。

不言而喻,您可能需要在计算机上拥有管理权限才能使其正常工作。

答案 2 :(得分:0)

我想我已经明白了。它可能是Designer代码的错误,或者我错过了一步。

我认为在设计器代码中,在InitializeComponent()方法中,它应该添加:

this.Installers.AddRange(new System.Configuration.Install.Installer[] {this.serviceProcessInstaller1, this.serviceInstaller1});

它不存在,所以我在ProjectInstaller构造函数中添加了它:

Installers.Add(serviceInstaller1);
Installers.Add(serviceProcessInstaller1);

现在安装时,它在计算机管理中列为服务。