STDMETHODIMP CTracker::execute(VARIANT varCommand, VARIANT varParameter, VARIANT *RetVal)
{
::VariantInit(RetVal);
RetVal->vt = VT_BSTR;
if ((varCommand.vt != VT_BSTR) || (varCommand.bstrVal == NULL)) {
RetVal->bstrVal = _com_util::ConvertStringToBSTR("File Not Found!");
return S_OK;
}
FILE *command = fopen(_com_util::ConvertBSTRToString(varCommand.bstrVal),_T("r"));
if (command) {
fclose(command);
char commandLine[1024];
if ((varParameter.vt == VT_BSTR) && (varParameter.bstrVal != NULL))
sprintf(commandLine,
//"/"%s/" /"%s/"",
"/"%s/" %s",
_com_util::ConvertBSTRToString(varCommand.bstrVal),
_com_util::ConvertBSTRToString(varParameter.bstrVal));
else
sprintf(commandLine,
"/"%s/"",
_com_util::ConvertBSTRToString(varCommand.bstrVal));
PROCESS_INFORMATION processInfo;
STARTUPINFO startupInfo;
memset(&startupInfo,0,sizeof(STARTUPINFO));
startupInfo.cb=sizeof(STARTUPINFO);
startupInfo.dwFlags=STARTF_USESHOWWINDOW;
startupInfo.wShowWindow=SW_SHOW;
BOOL bRetValue=::CreateProcess(NULL,
(LPTSTR)(LPCTSTR)commandLine,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE, //?
NULL,
NULL,
&startupInfo,
&processInfo);
char message[1024];
if (bRetValue)
sprintf(message,"Command:%s/nExecuted Sucessfully!",commandLine);
else {
DWORD error = GetLastError();
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
error,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0,
NULL);
sprintf(message,"Command:%s/nExecuted Falied!/nError Code:%d/nError Message:%s",commandLine,error,lpMsgBuf);
}
RetVal->bstrVal = _com_util::ConvertStringToBSTR((LPCTSTR)message);
} else{
//command not found and to download it
RetVal->bstrVal = _com_util::ConvertStringToBSTR("File Not Found!");
}
return S_OK;
}
那位高手给指点下