起因:某手持设备扫码枪创建服务后无法启动,需要修改服务的启动类型和登录身份
功能:判断是否有相关服务,有的话是否启动,非运行状态则按照实际情况判断处理
其它:转数据库了好久没写过C#,大佬们如果可以给优化一下代码那更是感激不尽
选择批处理是因为C#代码不知道怎么写,求大佬指教。另外有纰漏欢迎各位大牛指出
[C#] 纯文本查看 复制代码 private void CheckError()
{
int tempFlag = 0;//判断服务状态,初始和未创建服务为0,-1和-2则为服务未运行
string wcesComm = "WcesComm";
string rapiMgr = "RapiMgr";
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController s in services)
{
if (s.ServiceName.Equals(wcesComm) || s.ServiceName.Equals(rapiMgr))
{
if (s.Status == ServiceControllerStatus.Running)
{
tempFlag++;
}
else
{
tempFlag = -2;//改为-2的原因是,如果设定为-1,那么如果第一个服务未运行tempFlag为-1
//第二个服务运行,进入if,tempFlag++变成0,影响最终结果
}
}
}
if (tempFlag != 2)//=2为正常,流程结束
{
MessageBox.Show("相关服务异常,请关闭杀毒软件以完成自动修复!");
if (tempFlag < 0)//小于0则至少有一个服务未运行
{
Process.Start(Environment.CurrentDirectory + @"\Files\startServices.bat", "/s");
}
else//没有相关服务,静默安装创建服务的exe并修复服务启动类型和登陆身份
{
Process.Start(Environment.CurrentDirectory + @"\Files\dev.exe", "/s");
Process.Start(Environment.CurrentDirectory + @"\Files\startServices.bat", "/s");
}
Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location);
Application.Exit();
}
}
下面是批处理文件,也是比较简单的,sc.exe设置
[PowerShell] 纯文本查看 复制代码 sc config WcesComm obj= LocalSystem
sc config RapiMgr obj= LocalSystem
sc config WcesComm start= auto
sc config RapiMgr start= auto
sc start WcesComm
sc start RapiMgr
代码文件,直接调用即可
|