如何在不使用installutil.exe的情况下安装VS2012 Windows服务

时间:2013-08-09 14:18:33

标签: .net windows service windows-services installer

我试图在不使用installutil的情况下安装Windows服务。我发现这是一种可以理解和直截了当的方法:

  

ManagedInstallerClass.InstallHelper

所以我最终得到以下Program.cs:

 static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main(string[] args)
    {
        if (args.Length >0)
        {
            string parameter = string.Concat(args);
            switch (parameter)
            {
                case "--install":
                    ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
                    break;
                case "--uninstall":
                    ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
                    break;
            }
        }
        else
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new PicknikService() 
            };
           ServiceBase.Run(ServicesToRun);
        }
    }
}

构建服务并执行MyService.exe后,我得到以下内容:

Cannot start service from the command line or debugger. A winwows Service must first be installed(using installutil.exe) and then started with the ServerExplorer, Windows Services Afministrative tool or the NET START command.

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

唯一可行的方法似乎是following

答案 1 :(得分:0)

ManagedInstallerClass.InstallHelper的{​​{3}}说明如下:

  

此API支持.NET Framework基础结构,但不支持   旨在直接从您的代码中使用。

虽然我毫不怀疑你提供的链接提供的解决方案可以解决这个问题,但它会大量使用P / Invoke调用。这没有什么不对,但我更喜欢完全基于C#的解决方案。

我在分步教程MSDN entry中有这样的解决方案,用于创建将从命令行安装和卸载自身的Windows服务,而无需InstallUtil.exe。它是为Visual Studio 2008编写的,但它仍然可以工作,因为我已经编写了一个在Visual Studio 2012中执行相同操作的服务。