首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使Windows服务启动为“自动(延迟启动)”

如何使Windows服务启动为“自动(延迟启动)”
EN

Stack Overflow用户
提问于 2010-01-28 17:36:35
回答 4查看 21.8K关注 0票数 24

场景:

作为Windows服务运行的WCF服务。帐户为"User“。

完成了什么:

我已经覆盖了项目安装程序中的OnBeforeInstall,以便能够从配置文件中设置用户名和密码。

我能做的事:

我希望能够将starttype设置为自动(延迟启动)

我尝试过的东西:

我将下面的代码行放在被覆盖的OnBeforeInstall中

serviceInstaller1.StartType = ServiceStartMode.Automatic + 1;

我认为我可以欺骗ServiceStartMode枚举来表示自动(延迟启动),但没有起作用。我没有尝试更多的东西,只是因为我找不到任何东西可以尝试。

我在网上找到的东西:

我发现自动(延迟启动)将在.NET 4中可用,但现在对我没有帮助。MSDN我发现可以将DelayedAutoStart添加到服务的配置键中,但如果我应该从代码中这样做,这感觉像是一个黑客行为。但也许这是我目前唯一可用的解决方案?

有什么想法吗?

罗伯特·佩尔松,瑞典

EN

回答 4

Stack Overflow用户

发布于 2012-03-02 06:36:34

现在.NET 4.0已经发布了:

代码语言:javascript
复制
serviceInstaller1.StartType = ServiceStartMode.Automatic;
serviceInstaller1.DelayedAutoStart = true;
票数 41
EN

Stack Overflow用户

发布于 2010-01-28 17:54:12

您唯一的其他选择是使用P/invoke通过SERVICE_CONFIG_DELAYED_AUTO_START_INFO调用ChangeServiceConfig2。但是,由于您似乎不愿意添加注册表项,我怀疑您是否希望使用P/invoke。在.NET框架(< 4.0)中没有其他方法可以做到这一点。

票数 6
EN

Stack Overflow用户

发布于 2013-08-28 05:49:36

对于我的.NET Framework3.5项目,我可以通过手动设置我的服务的DelayedAutostart值,将我的服务安装为“自动(延迟)”服务。例如:

代码语言:javascript
复制
public ProjectInstaller()
{
  ...

  AfterInstall += ProjectInstaller_AfterInstall;
}

void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
{
  string serviceName = <YourSpecific>Installer.ServiceName;

  using (RegistryKey serviceKey = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Services\" + serviceName, true))
  {
      serviceKey.SetValue("DelayedAutostart", 1, RegistryValueKind.DWord);
  }
}

请注意,安装该服务后,该服务将不会被列为“自动(延迟)”,直到计算机重新启动后的延迟。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2153490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档