在VC程序中调用exe文件或者批处理文件方法总结
2011-03-19 22:45
615 查看
在VC程序中调用exe文件或者批处理文件的方法:
一、使用system函数。
该函数可以直接使用,调用exe程序或者bat批处理程序
例如:CString strCommand("d:\\test.bat");
system(strCommand);
二、使用ShellExecute函数
该函数可以将调用的窗口隐藏或者显示。
HINSTANCE ShellExecute( HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
三、使用CreateProcess函数
std::string strCommand = strApp + "\\PerDecodeX2ap.exe";
PROCESS_INFORMATION pi;
STARTUPINFO si;
//初始化变量
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW;
char buff[256];
sprintf(buff,"%s",strCommand.c_str());
BOOL fRet=CreateProcess(NULL,
buff,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,
NULL,
NULL,
&si,
&pi);
if (!fRet)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL );
AfxMessageBox( (LPCTSTR)lpMsgBuf);
return FALSE;
}
四、使用如下封装好的函数(自己写的),尝试各种方法去启动可执行程序
CommandExecuter(const char *szAppName, const char *szCmd)
{
char szWorkPath[256] = {0};
char szCommand[256] = {0};
int j = 0;
//从配置文件中取参数
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
si.cb = sizeof(si);
if ( szAppName != NULL && strlen(szAppName) > 0 )
{
memset( szWorkPath, 0, 256 );
GetSystemDirectory(szWorkPath, 256);
szWorkPath[3] = '\0';
strcat(szWorkPath, "Program Files\\");
strcat(szWorkPath, szAppName);
if(_access(szWorkPath, strlen(szWorkPath)) == -1)
{
strcpy(szWorkPath, szAppName);
}//if(_access(szWorkPath, strlen(szWorkPath)) == -1)
strcat(szWorkPath, " ");
strcat(szWorkPath, szCmd);
if ( CreateProcess( NULL,
(char *)szWorkPath,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
CloseHandle( pi.hThread );
CloseHandle( pi.hProcess );
return;
}
if ( CreateProcess( szAppName,
(LPSTR)szCmd,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
CloseHandle( pi.hThread );
CloseHandle( pi.hProcess );
return;
}
if ( (int)ShellExecute ( NULL,
NULL,
(LPCSTR)szWorkPath,
NULL,
NULL,
SW_SHOW ) > 32 )
{
// 启动成功了
return;
}
if ( (int)ShellExecute( NULL,
NULL,
szAppName,
(LPCSTR)szCmd,
NULL,
SW_SHOW ) > 32 )
{
// 启动成功了
return;
}
}//if ( szAppName != NULL && strlen(szAppName) > 0 )
else
{
if ( CreateProcess(NULL, (char *)szCmd, NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi) )
{
CloseHandle( pi.hThread );
CloseHandle( pi.hProcess );
return;
}//if ( CreateProcess(NULL, (char *)szCmd, NULL, NULL,
FALSE, 0, NULL, NULL, &si, &pi) )
ShellExecute ( NULL, NULL, (LPCSTR)szCmd, NULL, NULL,
SW_SHOW );
}
}
一、使用system函数。
该函数可以直接使用,调用exe程序或者bat批处理程序
例如:CString strCommand("d:\\test.bat");
system(strCommand);
二、使用ShellExecute函数
该函数可以将调用的窗口隐藏或者显示。
HINSTANCE ShellExecute( HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
三、使用CreateProcess函数
std::string strCommand = strApp + "\\PerDecodeX2ap.exe";
PROCESS_INFORMATION pi;
STARTUPINFO si;
//初始化变量
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW;
char buff[256];
sprintf(buff,"%s",strCommand.c_str());
BOOL fRet=CreateProcess(NULL,
buff,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,
NULL,
NULL,
&si,
&pi);
if (!fRet)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL );
AfxMessageBox( (LPCTSTR)lpMsgBuf);
return FALSE;
}
四、使用如下封装好的函数(自己写的),尝试各种方法去启动可执行程序
CommandExecuter(const char *szAppName, const char *szCmd)
{
char szWorkPath[256] = {0};
char szCommand[256] = {0};
int j = 0;
//从配置文件中取参数
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
si.cb = sizeof(si);
if ( szAppName != NULL && strlen(szAppName) > 0 )
{
memset( szWorkPath, 0, 256 );
GetSystemDirectory(szWorkPath, 256);
szWorkPath[3] = '\0';
strcat(szWorkPath, "Program Files\\");
strcat(szWorkPath, szAppName);
if(_access(szWorkPath, strlen(szWorkPath)) == -1)
{
strcpy(szWorkPath, szAppName);
}//if(_access(szWorkPath, strlen(szWorkPath)) == -1)
strcat(szWorkPath, " ");
strcat(szWorkPath, szCmd);
if ( CreateProcess( NULL,
(char *)szWorkPath,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
CloseHandle( pi.hThread );
CloseHandle( pi.hProcess );
return;
}
if ( CreateProcess( szAppName,
(LPSTR)szCmd,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
CloseHandle( pi.hThread );
CloseHandle( pi.hProcess );
return;
}
if ( (int)ShellExecute ( NULL,
NULL,
(LPCSTR)szWorkPath,
NULL,
NULL,
SW_SHOW ) > 32 )
{
// 启动成功了
return;
}
if ( (int)ShellExecute( NULL,
NULL,
szAppName,
(LPCSTR)szCmd,
NULL,
SW_SHOW ) > 32 )
{
// 启动成功了
return;
}
}//if ( szAppName != NULL && strlen(szAppName) > 0 )
else
{
if ( CreateProcess(NULL, (char *)szCmd, NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi) )
{
CloseHandle( pi.hThread );
CloseHandle( pi.hProcess );
return;
}//if ( CreateProcess(NULL, (char *)szCmd, NULL, NULL,
FALSE, 0, NULL, NULL, &si, &pi) )
ShellExecute ( NULL, NULL, (LPCSTR)szCmd, NULL, NULL,
SW_SHOW );
}
}
相关文章推荐
- 在VC程序中调用exe文件或者批处理文件方法总结
- 在VC程序中调用exe文件或者批处理文件的方法:
- 在VC中调用exe文件或者批处理文件方法总结
- Matlab程序调用外部exe(可执行文件)方法及参数传递
- VC通过WinExec和ShellExecute打开指定程序或者文件的方法
- C#调用exe文件,IIS发布后无法掉用本地exe程序的解决方法
- VC WinExec打开指定程序或者文件的方法
- C#调用exe文件,IIS发布后无法掉用本地exe程序的解决方法
- 将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
- 总结VC程序中调用服务组件COM的方法
- 编译QT5.0.1的错误“qtbase\\configure.exe' 不是内部或外部命令,也不是可运行的程序或批处理文件”的解决方法
- C#调用Exe文件的方法及如何判断程序调用的exe已结束
- VC中调用外部EXE程序方法(转)
- VC++调用EXE文件的方法 (WinExc,ShellExcute,CreateProcess)
- 在EXE程序中调用DLL文件后出现_CrtIsValidHeapPointer(pUserData)问题的解决方法
- C#调用Exe文件的方法及如何判断程序调用的exe已结束
- VC中调用其它程序的三种方法总结
- VC中调用其它程序的三种方法总结
- [转]将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
- 利用certutil.exe实现在批处理(bat)中嵌入可执行文件或者各种媒体、图片之类二进制文件的简单方法!