void CKDBTagTreeView::ExecuteBatchCommand(int type)
{
WCHAR szAppPath[1024] = { 0 } ;
if( GetModuleFileNameW(NULL,szAppPath,1023 ) == 0 )
return;
// 提取目录和文件名
WCHAR wszFileName[MAX_PATH] = { 0 };
LPWSTR pwszPos = wcsrchr( szAppPath, L'\\' );
if ( pwszPos != NULL )
{
// 提取不带后缀的文件名
wcscpy( wszFileName, pwszPos+1 );
LPWSTR pwszDot = wcsrchr( wszFileName, L'.' );
if ( pwszDot != NULL )
wszFileName[ pwszDot-wszFileName ] = L'\0';
// 提取目录
szAppPath[ pwszPos-szAppPath+1 ] = L'\0';
wcscat( szAppPath, L"MonitorGroupServer\\" );
}
//如果路径中包含Program Files (x86)则要把路径改为Progra~2 否则执行失败
WCHAR wszRFileName[MAX_PATH] = { 0 };
LPWSTR pwsPos1 = wcsrchr( szAppPath, L')' );
if ( pwsPos1 != NULL )
{
// 提取括号右侧文件路径
wcscpy( wszRFileName, pwsPos1+2 );
// 提取括号左侧路径
szAppPath[ pwsPos1-szAppPath+1 ] = L'\0';
LPWSTR pwszLPos = wcsrchr( szAppPath, L'\\' );
if (pwszLPos != NULL)
{
// 提取\左侧路径
szAppPath[ pwszLPos-szAppPath+1 ] = L'\0';
wcscat( szAppPath, L"Progra~2\\" );
}
wcscat( szAppPath,wszRFileName);
}
switch(type)
{
case 0:
{
// 注册目录
wcscat( szAppPath, L"RegisteService.bat" );
}
break;
case 1:
{
// 删除服务
wcscat( szAppPath, L"RemoveServer.bat" );
}
break;
case 2:
{
// 启动服务
wcscat( szAppPath, L"StartService.bat" );
}
break;
case 3:
{
// 停止服务
wcscat( szAppPath, L"StopService.bat" );
}
break;
case 4:
{
// 重启服务
wcscat( szAppPath, L"RestartService.bat" );
}
break;
default:
{
}
break;
}
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
if (CreateProcess(szAppPath,
NULL,
NULL,
NULL,
FALSE,
/*CREATE_NO_WINDOW*/CREATE_NEW_CONSOLE,// 这里不为该进程创建一个控制台窗口
NULL,
NULL,
&si, &pi))
{
WaitForSingleObject(pi.hProcess, INFINITE);// 等待bat执行结束
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
}