VC++如何双击文件,实现自我复制到某个目录并实现开机自启动(添加启动项)

发布时间:2024-05-09 12:39 发布:上海旅游网

问题描述:

一个C/S模式当中,一个Client,一个Server,Server要实现的功能是双击server.exe文件,将该文件自动复制到某目录中,并将此目录下程序添加到启动项中。
目前进度:已实现自启动,但复制到某目录还没有实现
希望:大家能帮帮我,如能解决定重谢
谢谢大家的关注,这里的程序只是用于局域网管理的一个软件,并不是你们说的东东

最新:复制的问题已经解决,但是像注册表添加启动项的问题又出来了?

问题解答:

这是一段实现你要求功能的代码,把它放到你程序的InitInstance函数中即可.肯定成功,因为我的程序就是这样跑的,下面的示例是复制到临时目录.

TCHAR tcModule[MAX_PATH] = {0};

GetModuleFileName(m_hInstance,tcModule,MAX_PATH); //获取文件自身目录
*(_tcsrchr(tcModule,_T('\\')) + 1) = 0;
if(_tcsicmp(tcModule,tcPath) == 0)
{
//

TCHAR tcTemp[MAX_PATH] = {0};
GetTempPath(MAX_PATH,tcTemp); //要复制到的目标目录

CString csSrcPath,csDestPath;

csSrcPath.Format(_T("%server.exe"),tcPath); //源路径
csDestPath.Format(_T("%server.exe"),tcTemp); //目标路径
CopyFile(csSrcPath,csDestPath,FALSE); //复制文件

ShellExecute(NULL,_T("open"),csDestPath.GetBuffer(0),NULL,NULL,SW_SHOW); //运行目标文件
return FALSE; //返回FALSE源程序就会退出运行状态
//ExitProcess(0);
}

问题没1楼说的那么简单。因为一个文件在运行中是不能被复制的。可以考虑使用另外一个b.exe文件。当server进程结束时,调用b进程,实现server文件的拷贝。

要复制到一个目录, 可以调用 CopyFile 这个函数, 原型为
BOOL CopyFile(
LPCTSTR lpExistingFileName, // name of an existing file
LPCTSTR lpNewFileName, // name of new file
BOOL bFailIfExists // operation if file exists
);

调用时, 先获取到你当前正在运行的 Server.exe 文件的全路径
char szExePath[MAX_PATH];
GetModuleFileName(NULL, szExePath, 255);
然后调用 CopyFile 复制到某个目录, 如
CopyFile(szExePath, _T("C:\\Windows"), TRUE);
这段代码可以放在对话框初始化函数中

你在搞什么东东呀,

他想搞病毒木马,是个小菜鸟!

现在的木马哟,唉

热点新闻