我正在尝试使用Microsoft.Sdc.Tasks.ServiceProcess.Exists
来检查服务是否存在。但是文档中没有使用它的示例。有人有吗?
spoon16
问问题
2365 次
2 回答
2
这就是我们如何检查服务是否存在,如果存在则停止它,做一些事情,然后再次启动服务(如果有并且它已经启动)。
辅助目标:
<target name="service_exists">
<script language="C#">
<references>
<include name="System.ServiceProcess.dll" />
</references>
<code><![CDATA[
public static void ScriptMain(Project project) {
String serviceName = project.Properties["service.name"];
project.Properties["service.exists"] = "false";
project.Properties["service.running"] = "false";
System.ServiceProcess.ServiceController[] scServices;
scServices = System.ServiceProcess.ServiceController.GetServices();
foreach (System.ServiceProcess.ServiceController scTemp in scServices)
{
if (String.Compare(scTemp.ServiceName.ToUpper(), serviceName.ToUpper()) == 0)
{
project.Properties["service.exists"] = "true";
project.Log(Level.Info, "Service " + serviceName + " exists");
if (scTemp.Status.Equals(System.ServiceProcess.ServiceControllerStatus.Running))
project.Properties["service.running"] = "true";
project.Log(Level.Info, "Service " + serviceName + " is running: " + project.Properties["service.running"]);
return;
}
}
project.Log(Level.Info, "Service " + serviceName + " doesn't exist");
}
]]></code>
</script>
</target>
用法:
<property name="service.name" value="Selection.Service" />
<call target="service_exists" />
<servicecontroller action="Stop" service="${service.name}" machine="${host}" timeout="60000" if="${service.exists}"/>
<!-- Do something -->
<servicecontroller action="Start" service="${service.name}" machine="${host}" timeout="60000" if="${bool::parse(service.exists) and bool::parse(service.running) == true}"/>
希望我没有遗漏任何内容 - 我们的构建管理员将所有内容保存在一个 msbuild 文件中,该文件现在超过 3600 行:|
于 2008-10-06T07:16:41.470 回答
1
我自己实际上并没有在生产中使用它,我不确定你有哪个版本(我有一个版本 2.1.3155.0 的副本),根据随附的 .chm 帮助文件,任务具有以下属性:
- DoesExist 如果指定的服务存在,则返回 TRUE
- IsDisabled 如果服务被禁用,则返回 TRUE
- ServiceName 向系统标识服务的短名称。
ServiceName 需要设置为“向系统标识服务的短名称,例如'W3SVC'”。
您可能想尝试使用众所周知的服务(例如 mssqlserver)并检查其他两个属性的结果(DoesExist/IsDisabled)。
更新:这是一个示例(作品):
导入任务,然后调用(例如)
<Microsoft.Sdc.Tasks.ServiceProcess.Exists ServiceName="Server"> <Output TaskParameter="DoesExist" PropertyName="Exists" /> </Microsoft.Sdc.Tasks.ServiceProcess.Exists>
< Message Text="服务存在吗?$(Exists)" />
于 2008-10-06T07:07:37.603 回答