我开发了一个Windows服务,但是需要它在安装时自动启动。问题是我找到的每个教程都通过Setup Project
向我展示。有一个很棒的3部分教程HERE,我曾经将我的应用程序转换为服务,但我的其他项目类型中没有Setup Project
。我可以以编程方式执行此操作,还是可以通过某种方式获取Setup Project
项目类型?
答案 0 :(得分:1)
我相信Topshelf项目有内置服务Installer / Uninstaller。当集成到应用程序中时,它可以通过应用程序本身的简单命令作为服务安装,例如,我们可以使用myService.exe
命令轻松安装和启动myService.exe install start
。
我们可以简单地创建一个自安装服务,这里是一个示例:
public class ServiceClass
{
public ServiceClass()
{
}
public void Start() { }
public void Stop() { }
}
public class Program
{
public static void Main(string[] args)
{
//we can simply install our service by setting specific commands for same or install it directly from command line or from another process
if (args.Length == 0)
{
var processName = Process.GetCurrentProcess().ProcessName + ".exe";
var install = Process.Start(processName, "install start");
install.WaitForExit();
return;
}
HostFactory.Run(x =>
{
x.Service<ServiceClass>(s =>
{
s.ConstructUsing(name => new ServiceClass());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("Topshelf Host");
x.SetDisplayName("TopShelf");
x.SetServiceName("TopShelf");
});
}
}
你可以通过PM> Install-Package Topshelf
Nuget命令获得Topshelf。
答案 1 :(得分:1)
在Installer类中,为AfterInstall事件添加处理程序。然后,您可以在事件处理程序中调用ServiceController来启动服务。
public ServiceInstaller()
{
//... Installer code here
this.AfterInstall += new InstallEventHandler(ServiceInstaller_AfterInstall);
}
void ServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
{
using (ServiceController sc = new ServiceController(serviceInstaller.ServiceName))
{
sc.Start();
}
}
现在,当您在安装程序上运行InstallUtil时,它将安装然后启动该服务。
答案 2 :(得分:0)
如果您的目标是Windows 7及更高版本,默认情况下会安装Powershell。一种选择是运行一个简单的PowerShell脚本,它安装服务,启动它,并将服务设置为在重新启动机器时自动启动:
InstallUtil yourService.exe
Start-Service yourService
Set-Service yourService -startuptype "Automatic"
答案 3 :(得分:0)
最好的办法是添加安装程序项目扩展!
在VS 2010之后,不推荐使用安装项目类型,但是根据反馈,微软已经为VS 2013带来了新版本。
从Microsoft安装新的安装程序项目扩展:https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d
这适用于任何非Express版本的Visual Studio 2013(包括新的免费Community Edition SDK)
然后,您可以按照与VS 2010安装项目相同的说明进行操作:)
对于VS2012来说没有一个简单的选择(我猜你可以尝试使用WiX的安装程序,但这需要学习很多东西!) 我不确定InstallShield LE(VS2012的免费版)是否适用于这种情况,但你可以尝试一下。
您可以随时更改安装后的服务启动类型。 (控制面板 - &gt;管理工具 - &gt;服务 - &gt;右键单击服务 - &gt;属性 - &gt;将“启动类型”更改为“自动”)