0

我正在尝试在不使用 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 --install 之后,我得到以下信息:

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.

有什么想法吗?

4

2 回答 2

1

唯一可能的方法似乎是以下

于 2013-08-09T15:05:00.907 回答
0

MSDN 条目说明ManagedInstallerClass.InstallHelper如下:

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

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

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

于 2013-08-10T15:29:53.163 回答