您的位置:首页 > 编程语言 > C#

使用SC在C#中取得windows服务的启动类型

2008-03-19 21:33 423 查看
//取得服务的启动类型的当前状态,返回启动类型的状态値

//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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: