//取得服务的启动类型的当前状态,返回启动类型的状态値
//2:自动,3:手动,4:禁用 ......
//sServiceName服务名称
//sState输出相关的状态代码,失败则为错误消息
public int GetWindowsServiceStartType(String sServiceName, out String sState)
{
sState = "";
try
{
System.Diagnostics.ProcessStartInfo objProcessInf = new System.Diagnostics.ProcessStartInfo();
objProcessInf.FileName = "cmd.exe";
objProcessInf.UseShellExecute = false;
objProcessInf.RedirectStandardError = true;
objProcessInf.RedirectStandardInput = true;
objProcessInf.RedirectStandardOutput = true;
objProcessInf.CreateNoWindow = true;
objProcessInf.Arguments = "/c sc qc " + sServiceName;
System.Diagnostics.Process objProcess = System.Diagnostics.Process.Start(objProcessInf);
String sStateValue = objProcess.StandardOutput.ReadToEnd();
if (sStateValue.IndexOf("AUTO_START") > 0)
{
sState = "AUTO_START";
return 2;
}
if (sStateValue.IndexOf("DEMAND_START") > 0)
{
sState = "DEMAND_START";
return 3;
}
if (sStateValue.IndexOf("DISABLED") > 0)
{
sState = "DISABLED";
return 4;
}
return 0;
}
catch(Exception e)
{
sState = e.Message;
return -1;
}
}
//设置服务的启动类型
//sServiceName服务名称
//iStartType要设置的启动类型
//返回成功状态 true:成功,false:失败
public Boolean SetWindowsServiceStartType(String sServiceName, int iStartType)
{
try
{
System.Diagnostics.ProcessStartInfo objProcessInf = new System.Diagnostics.ProcessStartInfo();
objProcessInf.FileName = "cmd.exe";
objProcessInf.CreateNoWindow = false;
objProcessInf.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
string sStartState = "boot";
switch (iStartType)
{
case 1:
{
sStartState = "system";
break;
}
case 2:
{
sStartState = "auto";
break;
}
case 3:
{
sStartState = "demand";
break;
}
case 4:
{
sStartState = "disabled";
break;
}
default:
{
break;
}
}
objProcessInf.Arguments = "/c sc config " + sServiceName + " start= " + sStartState;
System.Diagnostics.Process.Start(objProcessInf);
return true;
}
catch
{
return false;
}
}