#include <windows.h> // 这个必须要有
#include <string> // 字符串处理函数
using namespace std
int main() {
char szFileName[256] = "" // 待会存完整路径
string strAnotherExe = "pipe.exe" // 要执行的另外一个exe的名称
// 获得程序的运行路径,包含本程序名
GetModuleFileNameA(NULL, szFileName, 256)
string strFileName = szFileName // 用string处理比较方便
// 删掉本程序名,只保留路径
size_t slashIndex = strFileName.rfind('\\')
strFileName.erase(slashIndex+1)
// 拼接要启动的程序的完整文件名
strFileName += strAnotherExe
cout<<"Another exe path : "<<strFileName<<endl
// 在当前程序中启动外部程序,输出会进入本程序
//system(strFileName.c_str())
// 在新的窗口中打开外部程序
strFileName = "start "+strFileName
system(strFileName.c_str())
return 0
}
主要思路是GetModuleFileNameA获得程序运行时的绝对路径,包含程序名。
因此只要删掉程序名,然后拼接上另外的一个程序名就可以了。
用system("程序名")可以启动一个子进程,然后主进程卡在system处,等子进程结束,主进程才继续往下走。
用system("start 程序名")可以在新窗口中打开进程,不等子进程结束,主进程就继续往下走。
PS:如果编译器提示没有system函数,请包含stdlib.h头文件。
OpenFileDialog Diag = new OpenFileDialog()Diag.ShowDialog()
上面是选择程序的代码
选择反程序之后的 Diag.FileName就是你这个程序的路径
//Diag.FileName
int GetProgramPathDir( char *szPath, const UINT nSize ){
char szExePath[ MAX_PATH ] //exe路径
char *pTemp = NULL //指针
if( NULL == szPath || nSize <1 )
{
return -2
}
memset( szExePath, 0, sizeof( szExePath ))
int nRetSize = GetModuleFileNameA( NULL, szExePath, MAX_PATH )
if( 0 == nRetSize )
{
return -1
}
if( nRetSize == MAX_PATH &&GetLastError() == ERROR_INSUFFICIENT_BUFFER )
{
return -3
}
pTemp = strrchr( szExePath, '\\' )
if( pTemp )
{
*pTemp = '\0'
}
if( strlen( szExePath ) >nSize )
{
return -3
}
strncpy_s( szPath, nSize, szExePath, nSize )
return 0
}
使用该函数获取exe文件目录。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)