我试图在不使用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.
有什么想法吗?
答案 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中执行相同操作的服务。