none
求一个算法 RRS feed

  • 问题

  • 用VC编写一个算法实现将指定DLL文件复制到本地机C:/WINDOW/SYSTEM32文件中并利用regsvr32 *.dll自动运行这个DLL文件。

    sunny
    2010年4月23日 5:52

答案

  • Hi LDX1986,

    您可以参考下面的代码:

    int main()
    {
    	//复制文件
    	BOOL b = CopyFile(TEXT("test.dll"),TEXT("C:/WINDOW/SYSTEM32/test.dll"),FALSE);
    	//启动命令注册dll
    	RunCommand(TEXT("regsvr32 C:/WINDOW/SYSTEM32/test.dll"));
    }
    
    //启动命令方法
    DWORD RunCommand(LPTSTR cmd)
    {
    	STARTUPINFO si;
    	PROCESS_INFORMATION pi;
    	//清空启动信息结构
    	ZeroMemory(&si, sizeof(si));
    	//设置结构大小
    	si.cb = sizeof(si);
    	//清空进程信息结构
    	ZeroMemory(&pi,sizeof(pi));
    
    	//创建进程
    	if(!CreateProcess(NULL,
    		cmd,
    		NULL,
    		NULL,
    		FALSE,
    		NULL,
    		NULL,
    		NULL,
    		&si,
    		&pi))
    	{
    		printf("Create process failed:%d.",GetLastError());
    		return 1;
    	}
    
    	//等待进程执行完毕
    	WaitForSingleObject(pi.hProcess,INFINITE);
    
    	//释放句柄
    	CloseHandle(pi.hProcess);
    	CloseHandle(pi.hThread);
    
    	return 0;
    }

    如果我的回复没有帮助,请及时回复。
    Aland Li


    Please mark the replies as answers if they help and unmark if they don't. This can be beneficial to other community members reading the thread.
    • 已标记为答案 LDX1986 2010年4月27日 1:02
    2010年4月26日 14:30
    版主

全部回复

  • 不用编写程序,直接用.bat文件写脚本就可以了。


    欢迎光临我的个人网站:http://www.joyvc.cn,本网站提供[IM即时通信|棋牌游戏|网游开发|UI编程|网络通讯|组件开发|图像多媒体|数据库]方面的VC/C++/C技术文章、源代码和教程资料
    2010年4月23日 6:50
    版主
  • 如果非要写到程序中,也可以将.bat中的脚本翻译成C++代码就可以了。
    欢迎光临我的个人网站:http://www.joyvc.cn,本网站提供[IM即时通信|棋牌游戏|网游开发|UI编程|网络通讯|组件开发|图像多媒体|数据库]方面的VC/C++/C技术文章、源代码和教程资料
    2010年4月23日 6:50
    版主
  • 写入system32和注册到HKLM需要管理员权限。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2010年4月23日 12:31
    版主
  • 施先生 您能帮忙写下.bat脚本吗?我是新手没有编写.bat文件的经验,但听您说了后我看了.bat的相关写法,我能写些简单的,但这个我还是写不出来,希望您能多指点。非常感谢。


    sunny
    2010年4月26日 1:50
  • Hi LDX1986,

    您可以参考下面的代码:

    int main()
    {
    	//复制文件
    	BOOL b = CopyFile(TEXT("test.dll"),TEXT("C:/WINDOW/SYSTEM32/test.dll"),FALSE);
    	//启动命令注册dll
    	RunCommand(TEXT("regsvr32 C:/WINDOW/SYSTEM32/test.dll"));
    }
    
    //启动命令方法
    DWORD RunCommand(LPTSTR cmd)
    {
    	STARTUPINFO si;
    	PROCESS_INFORMATION pi;
    	//清空启动信息结构
    	ZeroMemory(&si, sizeof(si));
    	//设置结构大小
    	si.cb = sizeof(si);
    	//清空进程信息结构
    	ZeroMemory(&pi,sizeof(pi));
    
    	//创建进程
    	if(!CreateProcess(NULL,
    		cmd,
    		NULL,
    		NULL,
    		FALSE,
    		NULL,
    		NULL,
    		NULL,
    		&si,
    		&pi))
    	{
    		printf("Create process failed:%d.",GetLastError());
    		return 1;
    	}
    
    	//等待进程执行完毕
    	WaitForSingleObject(pi.hProcess,INFINITE);
    
    	//释放句柄
    	CloseHandle(pi.hProcess);
    	CloseHandle(pi.hThread);
    
    	return 0;
    }

    如果我的回复没有帮助,请及时回复。
    Aland Li


    Please mark the replies as answers if they help and unmark if they don't. This can be beneficial to other community members reading the thread.
    • 已标记为答案 LDX1986 2010年4月27日 1:02
    2010年4月26日 14:30
    版主