我知道这个问题被问了好几次,表格A开始另一个表格B,然后A需要关闭,B需要继续运行。但是,我的问题是,A不仅关闭,而且还删除了一个安装程序也包括在内。
这一过程是:
安装程序同时安装A和B,A是主要形式。当A启动时,它会检查是否有新版本。如果存在,A需要单独启动表单B,以便B可以调用将卸载A的.bat脚本,并将其从服务器替换为最新版本。(B是一个简单的表格,有1个标签,请稍候更新)。问题是当B被调用时,它会调用.bat文件来卸载A,这意味着它也会杀死A,而A也会杀死B。所以当卸载发生时,请等待表单消失,进程停止。
到目前为止,我尝试用一个新线程在A的Program.cs中启动B,这样它将“独立”于A,但没有成功。
var t = new System.Threading.Thread(ThreadProc);
t.Start();
Close();
public static void ThreadProc()
{
Application.Run(new B());
}我也试着在没有线程的情况下调用B,但是一旦A被卸载,B也会死掉。
Application.Run(new B());
or
var b = new B();如果我从文件夹中手动运行B (update)表单,它会卸载A,并安装最新的一个。是否有办法从A表单内部实现这一点,以便它独立调用B,然后可以完成该过程?
发布于 2020-01-08 14:17:21
如果你所说的形式是指executables...then,你只需要扼杀这个过程。
using System.Diagnostics;
Process bProcesss = Process.Start("C:\B.exe");
// do something
bProcess.Kill();在您的情况下,您可能需要这样的东西从B.exe调用
Static void Main()
{
KillProcess("A_Program");
}
private static void KillProcess(string processName)
{
Process[] runningProcesses = Process.GetProcesses();
foreach (Process process in runningProcesses)
{
if (process.ProcessName == processName)
{
process.Kill();
}
}
}https://stackoverflow.com/questions/59647286
复制相似问题