Подтвердить что ты не робот

Начать новый процесс, не будучи ребенком процесса нереста

Как я могу начать новый процесс, не являясь потомком вызывающего процесса.

Пример:

Основная программа (Caller.exe)

process.start("file.exe")

pic http://i44.tinypic.com/vxhj5s.gif

4b9b3361

Ответ 1

Вот код, который я сейчас использую. Я думал, что это может быть полезно кому-то. Он принимает один аргумент. Аргумент - это кодированная base64 строка, которая декодирует путь к файлу, который вы хотите запустить.

 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

Ответ 2

Если процесс нереста (родительский) заканчивается до того, как порожденный процесс (дочерний) делает, то цепочка родитель-ребенок сломается. Чтобы использовать это, вам нужно будет использовать промежуточный процесс-заглушку: Caller.exe → Stub.exe → File.exe. Здесь Stub.exe - простая программа запуска, которая заканчивается сразу после запуска File.exe.

Ответ 3

Если вы запустите процесс, вы станете его родителем.

Возможно, вы могли бы попытаться запустить свой процесс из cmd.exe, поэтому cmd.exe будет родителем.

Process proc = Process.Start(new ProcessStartInfo { Arguments = "/C explorer", FileName = "cmd", WindowStyle = ProcessWindowStyle.Hidden });

Ответ 4

Это запускает новый процесс без родителя:

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);

Ответ 5

Документация Process.Start(string fileName) говорит

a new process that’s started alongside already running instances 
of the same process will be independent

и он говорит

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

что для меня похоже на независимые процессы.

Итак, согласно документации, Process.Start должен делать то, что вы хотите.