我试图使用Microsoft.Sdc.Tasks.ServiceProcess.Exists
来检查服务是否存在。虽然没有在文档中使用它的例子。任何人都有一个?使用服务的示例存在Microsoft.Sdc.Tasks中的MSBuild任务?
1
A
回答
1
我实际上并没有在生产环境中实际使用过它,我不确定您拥有哪个版本(我拥有版本2.1.3155.0的副本),并根据随附的.chm帮助文件,任务具有以下内容属性:
- 如果指定的服务存在
- 如果服务被禁用
- 服务名称标识服务于该系统中的短名称IsDisabled返回TRUE DoesExist返回TRUE。
ServiceName需要设置为“识别系统服务的短名称,例如'W3SVC'”。
您可能想尝试使用众所周知的服务(例如mssqlserver)并检查其他两个属性(DoesExist/IsDisabled)的结果。
更新:下面是一个示例(作品):
导入任务,然后调用(如)
< Microsoft.Sdc.Tasks.ServiceProcess.Exists 服务名称= “服务器”> <输出TaskParameter = “DoesExist” 属性名= “存在”/> < /Microsoft.Sdc.Tasks.ServiceProcess.Exists>
<消息文本= “服务存在?$(存在)”/>
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行:|
相关问题
- 1. 使用MSBuild和Microsoft.Sdc.Tasks安装win32服务
- 2. 邮编使用MSBuild任务
- 3. 使用WriteCodeFragment MSBuild任务
- 4. msbuild的SFTP任务?
- 5. MSBuild任务在自定义任务中使用TFS API后无提示失败
- 6. 使用示例服务
- 7. Svcutil.exe MSBuild任务
- 8. MSBuild WriteCodeFragment任务
- 9. XSLTC.EXE MSBuild任务
- 10. 使用MSBuild 2015的AspNetMerge任务
- 11. 保存msbuild任务的外部文件
- 12. 任务中引用DLL的MSBuild
- 13. 在MSBuild中重写继承的任务
- 14. 开源msbuild任务
- 15. MSBuild回声任务?
- 16. 在C/C++中创建Windows服务的任何示例? (无GUI)
- 17. Nant msbuild任务,使用.net 4.0 rc
- 18. 如何使用(wix)火炬msbuild任务?
- 19. 使用XmlUpdate MSBuild任务更新CDATA节?
- 20. 调用SignalR Async的JQuery示例任务
- 21. 任何好的PowerShell MSBuild任务?
- 22. 在使用异步任务的活动中完成任务呼叫服务
- 23. 如何能任务参数中的MSBuild
- 24. 在Python中使用HTTPS的Apache Thrift服务示例
- 25. 在MSBuild任务中抛出错误
- 26. 在MSBuild任务中生成代码
- 27. 如何在MSBUILD中执行任务?
- 28. 使用飞镖服务示例网站
- 29. 如何使用wpm2 bps服务器的bpmn服务任务?
- 30. 使MSBuild的Exec任务显示交互式外壳