方案: 从App1,我需要执行App2传递App1.Handle作为参数。 App2应该等到App1关闭。在此之后,App2应该用更新版本替换App1.exe文件。
编辑:
App1的:
var
SenderHandle : THandle;
begin
if(ParamStr(1) <> '') then
begin
SenderHandle := StrToInt(ParamStr(1));
WaitForSingleObject(SenderHandle, INFINITE);
ShowMessage('App1 Terminated!');
//Showmessage is executed when App1 is still running, what's wrong?
end;
end;
App2的:
public function getCategory(){
$query = mysql_query("SELECT * FROM category");
$category = array();
for($i=0; $i < mysql_num_rows($query); $i++){
$row = mysql_fetch_array($query);
$temp = array(
'cat_id'=>$row['cat_id'],
'cat_name' =>$row['cat_name'],
'sub_cat' =>$this->getSubCategory($row['cat_id'])
);
$category[$i] = $temp;
}
return $category;
}
public function getSubCategory($cat_id){
$sql = "Select * from sub_category where cat_id=".$cat_id." ";
$query = mysql_query($sql);
$sub_cat = array();
for($i=0; $i < mysql_num_rows($query); $i++){
$row = mysql_fetch_array($query);
$temp = array(
'subcat_id'=>$row['subcat_id'],
'cat_id'=>$row['cat_id'],
'sub_cat_name' =>$row['sub_cat_name']
);
$sub_cat[$i] = $temp;
}
return $sub_cat;
}
答案 0 :(得分:3)
App1.Handle
表示窗口句柄。 App2需要等待App1的进程句柄。要获取App1的流程处理,请使用OpenProcess()
作为进程ID,GetCurrentProcessId()
使用DuplicateHandle()
作为源句柄。然后,您可以将句柄传递给App2,并让App2使用GetCurrentProcess()
等待它。当App1退出时,手柄将发出信号。然后App2可以关闭句柄并替换App1.exe。
答案 1 :(得分:-1)
为什么要等待进程使用PID终止?为什么不尝试覆盖该文件?只要进程仍在运行,就无法覆盖.EXE文件。
IE中。类似的东西:
WHILE NOT CopyFile(NewVersion,InstalledVersion) DO Sleep(100);
当然你可以加入超时和其他安全措施,但上面显示了另一种方法,无需PID或其他值来测试......