场景:
作为Windows服务运行的WCF服务。帐户为"User“。
完成了什么:
我已经覆盖了项目安装程序中的OnBeforeInstall,以便能够从配置文件中设置用户名和密码。
我能做的事:
我希望能够将starttype设置为自动(延迟启动)
我尝试过的东西:
我将下面的代码行放在被覆盖的OnBeforeInstall中
serviceInstaller1.StartType = ServiceStartMode.Automatic + 1;
我认为我可以欺骗ServiceStartMode枚举来表示自动(延迟启动),但没有起作用。我没有尝试更多的东西,只是因为我找不到任何东西可以尝试。
我在网上找到的东西:
我发现自动(延迟启动)将在.NET 4中可用,但现在对我没有帮助。MSDN我发现可以将DelayedAutoStart添加到服务的配置键中,但如果我应该从代码中这样做,这感觉像是一个黑客行为。但也许这是我目前唯一可用的解决方案?
有什么想法吗?
罗伯特·佩尔松,瑞典
发布于 2012-03-02 06:36:34
现在.NET 4.0已经发布了:
serviceInstaller1.StartType = ServiceStartMode.Automatic;
serviceInstaller1.DelayedAutoStart = true;
发布于 2010-01-28 17:54:12
您唯一的其他选择是使用P/invoke通过SERVICE_CONFIG_DELAYED_AUTO_START_INFO
调用ChangeServiceConfig2。但是,由于您似乎不愿意添加注册表项,我怀疑您是否希望使用P/invoke。在.NET框架(< 4.0)中没有其他方法可以做到这一点。
发布于 2013-08-28 05:49:36
对于我的.NET Framework3.5项目,我可以通过手动设置我的服务的DelayedAutostart
值,将我的服务安装为“自动(延迟)”服务。例如:
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);
}
}
请注意,安装该服务后,该服务将不会被列为“自动(延迟)”,直到计算机重新启动后的延迟。
https://stackoverflow.com/questions/2153490
复制相似问题