delphi 如何先关闭掉主程序再运行另外一个程序? 25
情况如下:运行主程序时,发现有更新信息,于是就先关闭主程序,然后打开update.exe程序,冲突的是,主程序还没有完全退出,一些dll还没有释放,更新程序已经将一些dl...
情况如下:运行主程序时,发现有更新信息,于是就先关闭主程序,然后打开update.exe程序,冲突的是,主程序还没有完全退出,一些dll还没有释放,更新程序已经将一些dll文件更新下来,产生文件共享冲突,无法更新?请高手指点,qq,杀毒软件是如何做到更新的?
展开
5个回答
展开全部
打开update.exe后先判断主程序是否在运行(或者先等待几秒),若有给出提示,稍作等待再进行更新程序,如此反复,直至可以更新时才更新。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//* 函数功能:执行程序至完成
//* 函数名称: WaitExeFinish
//****************************************************
function WaitExeFinish(const sExeName: String): Boolean;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
strExeName: String;
begin
Result:= True;
strExeName:= sExeName;
FillChar(StartupInfo, SizeOf(StartupInfo), 0);
CreateProcess(nil, PChar(strExeName), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo);
with ProcessInfo do
begin
CloseHandle(hThread);
WaitForSingleObject(hProcess, INFINITE);
CloseHandle(hProcess);
end;
end;
调用方法
WaitExeFinish('01.bat');
WaitExeFinish('02.bat');
//* 函数名称: WaitExeFinish
//****************************************************
function WaitExeFinish(const sExeName: String): Boolean;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
strExeName: String;
begin
Result:= True;
strExeName:= sExeName;
FillChar(StartupInfo, SizeOf(StartupInfo), 0);
CreateProcess(nil, PChar(strExeName), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo);
with ProcessInfo do
begin
CloseHandle(hThread);
WaitForSingleObject(hProcess, INFINITE);
CloseHandle(hProcess);
end;
end;
调用方法
WaitExeFinish('01.bat');
WaitExeFinish('02.bat');
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加载的DLL,手工释放,完成后,再执行Application.terminate,Sleep(100),再ShellExecute另一个程序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只能编著一个程序.
先让主程序退出.,不行强行kill掉然后检测自己的dll是否已经 regsvr 然后再去调用 update.exe
先让主程序退出.,不行强行kill掉然后检测自己的dll是否已经 regsvr 然后再去调用 update.exe
追问
如何实现啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
去找找杀进程的代码啊,直接在update里面先把进程杀掉不 就ok了?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询