具有启动CSHARP,例如和SO问题(适当注意到有关重新启动从C#中的窗口服务,并无法重新启动服务),并与各种其他问题重启只是一个服务,我想知道,最好的方法是什么,重新启动服务与相关的服务(例如Message Queuing,在其上Message Queuing Triggers取决于,或者IIS,在其上FTP Publishing和World Wide Web Publishing依赖).mmc管理单元自动执行此操作,但代码似乎没有提供相同的功能(至少不那么容易).
Stop的MSDN文档说"如果任何服务依赖于此服务进行操作,它们将在此服务停止之前停止.DependentServices属性包含依赖于此服务的服务集",并DependentServices返回一组服务.假设StartService()并StopService()遵循示例中概述的约定和上面引用的约定(除非它们接受ServiceControllers并TimeSpans直接接受),我开始:
public static void RestartServiceWithDependents(ServiceController service, TimeSpan timeout)
{
ServiceController[] dependentServices = service.DependentServices;
RestartService(service, timeout); // will stop dependent services, see note below* about timeout...
foreach (ServiceController dependentService in dependentServices)
{
StartService(dependentService, timeout);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果该服务依赖关系嵌套(递归)或周期性的(如果这甚至有可能...) -如果Service A是 …
比较可以任意链接,例如,
x < y <= z等同于x < y and y <= z,除了y仅评估一次(但在两种情况下z都没有被评估,当x < y发现是假的时).
这些SO问题/答案对这种用法有了更多的了解:
所以像(人为的例子):
if 1 < input("Value:") < 10: print "Is greater than 1 and less than 10"
Run Code Online (Sandbox Code Playgroud)
只要求输入一次.这是有道理的.还有这个:
if 1 < input("Val1:") < 10 < input("Val2:") < 20: print "woo!"
Run Code Online (Sandbox Code Playgroud)
只询问Val2 是否 Val1介于1和10之间,只打印"呜!" 如果 Val2也是10到20之间(证明它们可以'任意链接').这也是有道理的.
但我仍然很好奇这是如何在词法分析器/解析器/编译器(或其他)级别实际实现/解释的.
上面的第一个例子基本上是这样实现的:
x = input("Value:")
1 < x and x < 10: …Run Code Online (Sandbox Code Playgroud) 我们有一个简单的实用程序应用程序,它可以读取JRE中使用的所有时区数据,并将其全部显示在一个简单的表中.我们需要使用较旧版本的JRE(6_24)来发布即将发布的产品(由于显然存在其他问题),但我们还需要在该版本中包含更新的时区更新(否则将包含在6_29中) ).我们已经打包了一个将要安装的私有JRE,因此使用TZUpdater工具将时区更新到该私有JRE 不是问题 - 问题是读取/验证tzdata的哪个版本(例如tzdata2010o,tzdata2011k)是正在使用实用程序应用程序读取(即正在运行应用程序的JRE中使用的是哪个版本).该应用程序当前在标题栏中显示JRE版本,但随着时区更新,这已不再足以确定正在使用的时区数据版本.
我查看了TimeZone类,但它似乎没有提供这些信息 - 也许有一个系统属性可以保存这些信息?TZUpdater工具知道正在使用哪个版本,所以它必须在某个地方可用 - 我无法想象他们会在分析中确定更新工具中正在使用哪个版本...有谁知道在哪里找到这个信息?