首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表单F2打开表单F1,然后卸载表单F1

从表单F2打开表单F1,然后卸载表单F1
EN

Stack Overflow用户
提问于 2020-01-08 13:48:23
回答 1查看 51关注 0票数 0

我知道这个问题被问了好几次,表格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,但没有成功。

代码语言:javascript
复制
var t = new System.Threading.Thread(ThreadProc);
t.Start();
Close();

public static void ThreadProc()
{
    Application.Run(new B());
}

我也试着在没有线程的情况下调用B,但是一旦A被卸载,B也会死掉。

代码语言:javascript
复制
Application.Run(new B());
or
var b = new B();

如果我从文件夹中手动运行B (update)表单,它会卸载A,并安装最新的一个。是否有办法从A表单内部实现这一点,以便它独立调用B,然后可以完成该过程?

EN

回答 1

Stack Overflow用户

发布于 2020-01-08 14:17:21

如果你所说的形式是指executables...then,你只需要扼杀这个过程。

代码语言:javascript
复制
using System.Diagnostics;

Process bProcesss = Process.Start("C:\B.exe");
// do something
bProcess.Kill();

在您的情况下,您可能需要这样的东西从B.exe调用

代码语言:javascript
复制
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();
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59647286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档