请教杀死进程的问题,谢谢。

sqllong 2010-07-14 11:42:41
程序运行后,进程名称为pro.exe,和该pro.exe同目录下有一个文件夹“download”,文件夹下有exe文件“pro.exe”。现需要实现以下功能:
第一步:杀死当前运行的pro.exe;
第二步:删除刚刚杀死的pro.exe;
第三步:把download文件夹下的pro.exe复制到上一级目录(原始的pro.exe所在目录);
第四步:运行pro.exe;

在CB6下该如何实现,谢谢。
...全文
271 32 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
sqllong 2010-07-15
  • 打赏
  • 举报
回复
恩,谢谢妖哥了。
结贴。
ccrun.com 2010-07-15
  • 打赏
  • 举报
回复
另外补充一下,演示工程中没有涉及下载部分.
演示运行时,你需要放一个MainApp.exe到download目录下.否则提示找不到升级需要的文件
ccrun.com 2010-07-15
  • 打赏
  • 举报
回复
主程序的界面截图:


升级程序是控制台工程,没有窗口.你懂的.
sw4419 2010-07-15
  • 打赏
  • 举报
回复
谢谢妖哥。
ccrun.com 2010-07-15
  • 打赏
  • 举报
回复
我做了个简单的Demo,一个主程序MainApp.exe,一个升级程序AutoUpgrade.exe,思路就是:主程序中执行升级的模块,将主程序进程的PID,主程序文件名和升级文件所在的路径作为参数带过去,升级程序负责关闭主程序的进程,备份主程序旧文件,复制升级文件,重新运行主程序等操作.
代码比较简单,有注释.
http://down.ccrun.com/temp/autoupgrade.zip
manco 2010-07-15
  • 打赏
  • 举报
回复
妖哥果然不是盖的!
ccrun.com 2010-07-15
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 sue3140 的回复:]
呃。。。难道就这样? 没有下文了。。。 我们也想共享下啊
万能的妖哥!
[/Quote]

什么叫做和没有下文呢. 昨天只是太困了, 就很早休息了.
一会代码就贴上来了, 要蛋定!
sue3140 2010-07-15
  • 打赏
  • 举报
回复
呃。。。难道就这样? 没有下文了。。。 我们也想共享下啊
万能的妖哥!
ccrun.com 2010-07-14
  • 打赏
  • 举报
回复
我手头没有娱乐软件瑞腥, 所以也无法测试到底是哪一句代码编译后会被娱乐式误报. 只能试试了.
你把
::ShellExecute(0, TEXT("Open"), strBatFile.c_str(), NULL, NULL, SW_HIDE);
换成
	PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si, 0x0, sizeof(STARTUPINFO));
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;

if (::CreateProcess(NULL, strBatFile.c_str(), NULL, NULL, false,
IDLE_PRIORITY_CLASS, NULL, NULL, &si, &pi))
{
::CloseHandle(pi.hThread);
::CloseHandle(pi.hProcess);
}

试试吧.
ccrun.com 2010-07-14
  • 打赏
  • 举报
回复
啊,谢特,这个该死的娱乐软件瑞腥. 这应该属于典型的娱乐式误报.
你先关闭瑞腥, 试试效果先. 然后再考虑修改部分代码以躲过娱乐软件的误杀.
sqllong 2010-07-14
  • 打赏
  • 举报
回复
谢谢 妖哥,
噢,启动的时候,会被瑞星报“木马提示”,咋办呢?
ccrun.com 2010-07-14
  • 打赏
  • 举报
回复
楼主在做自动升级? 试试这个:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String strAppFile = ParamStr(0);
String strAppName = ExtractFileName(strAppFile);
String strAppPath = ExtractFilePath(strAppFile);
String strBatFile = strAppPath + TEXT("~t.bat");

TStringList *lst = new TStringList;
String str;

lst->Add(str.sprintf(TEXT("@echo off")));
lst->Add(str.sprintf(TEXT(":try")));
lst->Add(str.sprintf(TEXT("del %s"), strAppFile));
lst->Add(str.sprintf(TEXT(":: // 63 63 72 75 6E 2E 63 6F 6D")));
lst->Add(str.sprintf(TEXT("if exist \"%s\" goto try"), strAppFile));
lst->Add(str.sprintf(TEXT("copy \"%s\\download\\%s\" \"%s\""),
strAppPath, strAppName, strAppFile));
lst->Add(str.sprintf(TEXT("\"%s\""), strAppFile));
lst->Add(str.sprintf(TEXT("del %0")));

lst->SaveToFile(strBatFile);

delete lst;

::ShellExecute(0, TEXT("Open"), strBatFile.c_str(), NULL, NULL, SW_HIDE);

Application->Terminate();
}
sqllong 2010-07-14
  • 打赏
  • 举报
回复
恩,谢谢妖哥了。我的邮箱9928563@qq.com,谢谢
ccrun.com 2010-07-14
  • 打赏
  • 举报
回复
今天太晚了,明天再发给你吧。
ggt87125 2010-07-14
  • 打赏
  • 举报
回复
学习了
iqyely 2010-07-14
  • 打赏
  • 举报
回复
(~ o ~)~zZ呼呼,学习下了,强。
sqllong 2010-07-14
  • 打赏
  • 举报
回复
恩,真的佩服妖哥的专注和能力。
ccrun.com 2010-07-14
  • 打赏
  • 举报
回复
你稍等我一会,我帮你写一段代码。
sqllong 2010-07-14
  • 打赏
  • 举报
回复
谢谢妖哥这么晚还来回复。
现在只能考虑另外做一个可执行文件来负责下载,关闭主进程,更新文件,重启主进程等等操作了。
代码上该如何实现呢?谢谢妖哥了
ccrun.com 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 sqllong 的回复:]
发现问题了,如果程序放置在桌面,运行就会有问题。
最棘手:如果杀毒软件禁用了批处理文件,该如何处理?]
瑞星提醒:
[/Quote]

都是该死的娱乐软件瑞腥惹的祸。不过由于瑞腥的愚民政策做的很到位,相信有不少人还是在用娱乐软件做病毒防护。所以只能考虑换一个思路了。
生成bat临时文件的路数既然走不同,注入别的进程代码,然后控制本进程相关的思路估计就更不行了。
现在只能考虑另外做一个可执行文件来负责下载,关闭主进程,更新文件,重启主进程等等操作了。
加载更多回复(12)

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧