回答
将以下类添加到您的项目中。
using System.ServiceProcess;
class ServInstaller : ServiceInstaller
{
protected override void OnCommitted(System.Collections.IDictionary savedState)
{
ServiceController sc = new ServiceController("YourServiceNameGoesHere");
sc.Start();
}
}
设置项目将选取类并在安装程序完成后运行您的服务。
ServiceController实现IDisposable。没有使用'使用'关键字或调用Dispose方法故意? – 2009-06-03 23:53:16
我同意妥善处置总是一个好主意。在这种情况下,它只运行一次。 OnCommitted在安装程序运行后触发,然后服务像其他服务一样进行管理,并在下次重新启动时自动启动。 – 2009-06-04 12:48:52
由于它运行OK ...
private System.ServiceProcess.ServiceInstaller serviceInstaller1;
private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
ServiceController sc = new ServiceController("YourServiceName");
sc.Start();
}
小除了接受的答案:
你也可以下载这样的服务名称 - 避免任何问题,如果服务的名称在将来改变:
protected override void OnCommitted(System.Collections.IDictionary savedState)
{
new ServiceController(serviceInstaller1.ServiceName).Start();
}
(每个安装有一个ServiceProcessInstaller和的ServiceInstaller。这里的ServiceInstaller称为serviceInstaller1。)
而不是创建自己的类中,选择项目安装服务安装程序并添加事件处理程序Comitted事件:
private void serviceInstallerService1_Committed(object sender, InstallEventArgs e)
{
var serviceInstaller = sender as ServiceInstaller;
// Start the service after it is installed.
if (serviceInstaller != null && serviceInstaller.StartType == ServiceStartMode.Automatic)
{
var serviceController = new ServiceController(serviceInstaller.ServiceName);
serviceController.Start();
}
}
,它会开始只有启动类型设置为自动为您服务。
根据上面的代码片段,我的ProjectInstaller.cs文件看起来像这样的名为FSWServiceMgr.exe的服务。该服务确实在安装后开始。请注意,在解决方案资源管理器中选择安装项目以设置公司等时,请单击属性选项卡(而不是右键单击)。
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
namespace FSWManager {
[RunInstaller(true)]
public partial class ProjectInstaller : Installer {
public ProjectInstaller() {
InitializeComponent();
this.FSWServiceMgr.AfterInstall += FSWServiceMgr_AfterInstall;
}
static void FSWServiceMgr_AfterInstall(object sender, InstallEventArgs e) {
new ServiceController("FSWServiceMgr").Start();
}
}
}
这种方法使用的安装程序和类代码量最少。
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
namespace MyProject
{
[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
public ProjectInstaller()
{
InitializeComponent();
serviceInstaller1.AfterInstall += (sender, args) => new ServiceController(serviceInstaller1.ServiceName).Start();
}
}
}
定义的安装程序类设计serviceInstaller1
(类型的ServiceInstaller),并在设计器中设置其属性ServiceName
。
- 1. 如何通过SC安装后自动启动Windows服务?
- 2. 安装时自动启动Windows服务
- 3. 安装时自动启动Windows服务
- 4. 如何将程序安装为在启动时自动启动的服务?
- 5. 启动时启动服务和应用程序安装后
- 6. 如何检查是否安装了服务并启动服务(如果安装了其他服务,如果安装并启动Windows的厨师的服务)
- 7. 如何在下载apk后自动启动Android安装程序?
- 8. Linuxbrew,安装的Postgres并自动启动服务
- 9. 如何在macports安装后启动spyder
- 10. MSI安装程序启动服务启动时的自动修复
- 11. 如何在我的mac上启动后自动启动zend服务器
- 12. Ruby on Rails:如何在后台自动启动WEBrick服务器?
- 13. SonarQube:java.lang.IllegalStateException:Webapp未启动..:SonarQube服务器在我启动服务器后自动关闭
- 14. 安装Windows服务将无法启动
- 15. msi安装程序 - 服务未启动
- 16. 无法安装/启动mysql服务器
- 17. 如何自动启动窗口服务
- 18. 我如何启动Windows服务自动
- 19. 如何让IIS服务自动启动?
- 20. 在RHEL 6中安装mod_dav_svn模块后httpd服务未启动
- 21. 一旦服务无法启动,您如何使WiX安装程序失败?
- 22. 如何启动CentOS 7启动后由source安装的RabbitMQ?
- 23. 安装WildFly 10如何在崩溃后自动重启JVM?
- 24. 安装我的Android应用程序后启动服务
- 25. 自动启动服务时,windows启动
- 26. 安装后启动midlet
- 27. 安装后重新启动
- 28. 安装后启动文件
- 29. 安装后Apache不启动
- 30. 系统重启后在Linux中自动启动服务
我很高兴看到有人发布有用的问题,他们知道答案。有时你只知道你的建议将受到欢迎。也有可能有人会用你的解决方案的有吸引力的替代方案回复。 – DOK 2008-10-17 16:25:38
这正是我所希望的。 – 2008-10-17 16:28:00
这是一件很明显的事情要做。它永远不会让我惊讶于微软在代码中遗漏的东西。 – 2009-06-16 13:38:37