Cómo se podría ir sobre el inicio de un nuevo proceso, sin que sea el hijo de el proceso de llamada.

Ejemplo:

Programa Principal (Caller.exe)

process.start("file.exe")

De imagen:

Iniciar nuevo proceso, sin ser un hijo de el proceso de desove

  • Sólo por curiosidad, ¿cuáles son las implicaciones de un proceso hijo y no padre?
  • Si un usuario se seleccione «terminar proceso árbol» en el taskmanager, toda mi aplicación no iba a morir.
  • Todavía huele a un XY problema. ¿Cuál es el punto real de nuevos procesos no ser hijo de la corriente, o eludir «matar el árbol de procesos»?

5 Comentarios

  1. 20

    Si el proceso de desove (padre) termina antes de que el proceso generado (hijo), entonces el padre /madre-hijo cadena se rompe. Para hacer uso de esto, usted tendría que usar un intermedio stub-proceso así:

    Caller.exe → Stub.exe → File.exe.

    Aquí Stub.exe es simple lanzador de programa que termina justo después de iniciar File.exe.

    • Muchas gracias. Voy a utilizar esta solución
    • Gracias por este. Terminé en una extraña situación donde había una representación del navegador de un applet de Java, que se llama un archivo exe de la aplicación, que a su vez representa una incrustado es decir componente a través de la Webbrowser de control, y un objetivo de terceros blackbox-tipo de página web que se ejecutan en este componente fue colgado hasta que los padres del navegador, ya sea ganado de nuevo enfoque o ha finalizado. De la crianza de los hijos .exe de la aplicación de Java resuelto completamente.
    • La comisión de programa ya no se puede recuperar con Process.GetProcesses()?
  2. 10

    Si se inicia un proceso, entonces usted va a ser su padre.

    Tal vez usted podría tratar de empezar su proceso de cmd.exe en lugar de eso, así que cmd.exe será el padre.

    Process proc = Process.Start(new ProcessStartInfo { Arguments = "/C explorer", FileName = "cmd", WindowStyle = ProcessWindowStyle.Hidden });
    • Se los voy a dar a este un tiro. Voy a publicar de nuevo. Gracias
    • Se me acaba de ocurrir que esto no funcionará si el usuario ha desactivado el símbolo del sistema. Aparte de eso, sería una gran solución.
    • No trabajo porque cmd muere sólo después de iniciado el proceso muere para relación parrent-niño no será quebrantada.
    • A menos que usted use start para iniciar el proceso de cmd?
  3. 4

    Este nuevo proceso se ejecuta sin padre:

    System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
    psi.FileName = @"cmd";
    psi.Arguments = "/C start notepad.exe";
    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    System.Diagnostics.Process.Start(psi);
    • esto no es cierto: siempre será un proceso hijo.
    • no. Acaba con ProcessExplorer.
  4. 1

    Aquí está el código que estoy usando ahora. He pensado que puede ser útil a alguien. Se acepta un argumento. El argumento es una cadena codificada en base64 que decodifica la ruta de acceso del archivo que desea ejecutar.

     Module Module1
    
        Sub Main()
            Dim CommandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Application.CommandLineArgs
            If CommandLineArgs.Count = 1 Then
                Try
                    Dim path As String = FromBase64(CommandLineArgs(0))
                    Diagnostics.Process.Start(path)
                Catch
                End Try
                End
            End If
        End Sub
    
        Function FromBase64(ByVal base64 As String) As String
            Dim b As Byte() = Convert.FromBase64String(base64)
            Return System.Text.Encoding.UTF8.GetString(b)
        End Function
    
    End Module
    • Su OP no dice nada acerca de la codificación base64, WTF?
    • Esta respuesta es de 6 años, así que me perdone si no recuerdo todos los detalles aquí. Creo que la decodificación base64 de la argumentación es un intento de la tira de caracteres no deseados desde la entrada de la ruta de acceso del archivo. La ruta de entrada, evidentemente, la necesidad de ser codificado en base64 que antes de usar este código. De nuevo, esto es a los 6 años, así que no estoy seguro si eso es lo que yo buscaba en ese momento. Probablemente hay una mejor manera de hacer esto, pero yo estaba todavía bastante nuevo en el momento de la escritura.
  5. 1

    La documentación de Proceso.Inicio(string fileName) dice

    a new process thats started alongside already running instances 
    of the same process will be independent

    y dice

    Starting a process by specifying its file name is similar to 
    typing the information in the Run dialog box of the Windows Start menu

    que me parece coherente con procesos independientes.

    Así que de acuerdo a la documentación, Process.Start debe hacer lo que deseo.

    • Sin embargo, me encontré con este problema, ya que desea generar un independiente proceso hijo, pero se genera dependencia a través de Process.Start. Luego he intentado aislar el comportamiento en un simple proyecto de prueba, donde llegué a la conclusión de que Process.Start hecho de iniciar el proceso de forma independiente. Esto me hace sospechar que hay algo más que afecta el comportamiento de Process.Start

Dejar respuesta

Please enter your comment!
Please enter your name here