相关疑难解决方法(0)

开始新的过程,而不是产卵过程的孩子

如果不是调用进程的子进程,我将如何开始新进程.

例:

主程序(Caller.exe)

process.start("file.exe")
Run Code Online (Sandbox Code Playgroud)

图片:

在此输入图像描述

c# vb.net process parent-child

24
推荐指数
5
解决办法
2万
查看次数

在ASP.NET Core Process中创建的子进程在退出时被杀死

我正在使用Process类在ASP.NET Core(.NET Framework)中生成子进程:

var process = new Process
            {
                StartInfo = new ProcessStartInfo(executableDir)
                {
                    Arguments = commandDefinition.CommandDef.ArgumentsAsString,
                    RedirectStandardOutput = true,
                    RedirectStandardError = true,
                    UseShellExecute = false,
                    CreateNoWindow = true,
                    WorkingDirectory = _contentPath,
                },
            };

process.Start()
Run Code Online (Sandbox Code Playgroud)

据我所知,当父(ASP.Net Core)进程被杀死时,子进程应该保持活跃状态​​.我使用两个控制台应用程序测试了这种行为,并且在杀死父进程后,子进程永远不会被杀死 但是,当我在ASP.NET Core中生成一个新进程时,子进程在以下情况下被杀死:

  • IIS回收应用程序.
  • MSDeploy发布了新版本的ASP.NET Core应用程序.
  • 使用dotnet watch时,应用程序在代码更改期间重新启动.

如果通过任务管理器杀死父级,它不会被杀死.(经过一些测试后并非总是如此)

从上面我怀疑ASP.NET Core中有一种机制可以在成功退出时杀死所有子进程.它在某处记录了吗?有没有办法避免它?我找不到有关此类行为的任何信息.

编辑:repro实际上非常简单.

  1. 创建ASP.NET核心项目(.NET Framework或.NET Core,无关紧要)
  2. 将以下代码添加到您的Startup班级
  3. 启动网络应用.它将在IIS Express下托管.计算过程将开始.现在要么通过任务管理器杀死你的应用程序,要么通过IIS express托盘图标关闭它.
  4. 计算过程将被杀死.(有时您需要尝试刷新离线网页)
 var process = new Process
 {
      StartInfo = new ProcessStartInfo("calc.exe")
      {
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false, …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-web-api

21
推荐指数
1
解决办法
1062
查看次数

如何创建一个不是其创建进程的子进程的进程?

我有两个进程,A 和 B。在某个时刻 A 创建了 B。创建 B 后,如果 A 的进程被终止,我希望 B 仍然存在。

我正在使用 CreateProcess() 创建 B,但我似乎找不到任何方法让它在不成为子进程的情况下创建进程。与 ShellExecuteEx() 相同,但我可能缺少一些标志。

有谁知道我可以用什么来做到这一点?

编辑:我忘了提到两个进程都需要另一个进程的句柄或进程 ID

windows mfc createprocess shellexecuteex

7
推荐指数
1
解决办法
4743
查看次数