我试图使用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 exec任务调用msbuild
- 3. 在MSBuild中使用Zip任务
- 4. MSBuild任务使用TeamCity credentails
- 5. 使用WriteCodeFragment MSBuild任务
- 6. 邮编使用MSBuild任务
- 7. msbuild的SFTP任务?
- 8. MSBuild任务在自定义任务中使用TFS API后无提示失败
- 9. 使用示例服务
- 10. Svcutil.exe MSBuild任务
- 11. XSLTC.EXE MSBuild任务
- 12. MSBuild WriteCodeFragment任务
- 13. 使用MSBuild 2015的AspNetMerge任务
- 14. 保存msbuild任务的外部文件
- 15. 任务中引用DLL的MSBuild
- 16. 在MSBuild中重写继承的任务
- 17. 在自定义任务中调用MSBuild任务
- 18. Haskell任务的Makefile示例
- 19. 开源msbuild任务
- 20. 多任务示例
- 21. MSBuild任务批处理多个任务
- 22. 在C/C++中创建Windows服务的任何示例? (无GUI)
- 23. NAnt中的MSBuild的XmlMassUpdate任务?
- 24. 使用XmlUpdate MSBuild任务更新CDATA节?
- 25. 如何使用YUI Compressor.Net MSBuild任务2.3.0.0
- 26. Nant msbuild任务,使用.net 4.0 rc
- 27. MSBuild使用任务和解决参考
- 28. 如何使用(wix)火炬msbuild任务?
- 29. 任何好的PowerShell MSBuild任务?
- 30. 访问MSBuild中的InstallShield任务