Soru Yumurtlama sürecinin çocuğu olmaksızın yeni bir süreç başlat


Arama sürecinin çocuğu olmaksızın yeni bir sürece başlamak için nasıl giderim.

Örnek:

Ana Program (Caller.exe)

process.start("file.exe")

Resim:

enter image description here


21
2017-12-08 16:37


Menşei


Sadece meraktan dolayı, bir çocuğun değil, bir ebeveyn sürecinin sonuçları nelerdir? - MichaelS
Bir kullanıcı görev yöneticisi içinde "işlem ağacını öldür" ü seçerse, tüm uygulamam ölmeyecekti. - Andrew Paglusch
Bunun neden herkesin kötü amaçlı yazılım hakkında bir soru olduğunu düşünebileceğini hayal edemiyorum. #ohwaitnevermind - cwharris
Hala gibi kokuyor XY sorunu. Yeni sürecin aktüel çocuğu olmamanın gerçek noktasını veya "süreç ağacını öldürmeyi" engellemek nedir? - Stéphane Gourichon


Cevaplar:


Yumurtlama işlemi (ana), yumurtlama işlemi (çocuk) yapmadan önce biterse, ebeveyn-çocuk zinciri bozulur. Bunu kullanabilmek için, bir ara profil kullanmanız gerekir:

Caller.exe → Stub.exe → Dosya.exe.

İşte Stub.exe File.exe'yi başlattıktan sonra biten basit başlatıcısı programıdır.


17
2017-12-08 16:57



Çok teşekkür ederim. Bu çözümü kullanacağım - Andrew Paglusch
Bunun için teşekkür ederim. Bir exe uygulaması olarak adlandırılan bir Java uygulaması oluşturan bir tarayıcı yaptığım garip bir durumla sonuçlandım. Webbrowser denetimi ve bu bileşende çalışan bir hedef üçüncü taraf blackbox türü web sayfası, ana tarayıcı arkaya odaklanıncaya veya sonlandırılıncaya kadar asılıydı. Java'dan De-parenting .exe uygulaması bunu tamamen çözdü. - Timekiller
Ayrılmış program artık alınamaz Process.GetProcesses()? - Altiano Gerung


Bir süreci başlatırsanız, o zaman ebeveyniniz olacaksınız.

Belki de sizin işleminizi cmd.exe yerine başlatmayı deneyebilirsiniz, böylece cmd.exe ebeveyn olacaktır.

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

8
2017-12-08 16:52



Buna bir şans vereceğim. Ben geri göndereceğim. Teşekkürler - Andrew Paglusch
Sadece kullanıcı komut komut istemini devre dışı bıraktıysa, bu işe yaramayacaktı. Bunun dışında harika bir çözüm olurdu. - Andrew Paglusch
Bu işe yaramaz çünkü cmd sadece başlama sürecinden sonra ölür, böylece ilişki-çocuk ilişkisi bozulmaz. - Svisstack
@Svisstack Kullanmıyorsanız start süreci cmd'den başlatmak için? - NetMage


Bu, ebeveyn olmadan yeni süreci çalıştırır:

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

3
2017-10-24 09:08



Bu doğru değil - her zaman bir çocuk süreci olacak. - AK_
@AK_ hayır öyle değil. Sadece ProcessExplorer ile kontrol edin. - ChrisB


Belgelerinin Process.Start(string fileName) diyor

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

ve diyor

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

Bana göre bağımsız süreçlerle tutarlı görünüyor.

Yani belgelere göre, Process.Start istediğini yapmalısın.


1
2017-12-20 14:07



Bununla birlikte, bu soruna rastladım çünkü bağımsız bir çocuk sürecini doğurmak istiyorlar, ama bu bağımlı bir şekilde ortaya çıkıyor. Process.Start. Sonra davranışını basit bir test projesinde denedim; Process.Start gerçekten süreci bağımsız olarak başlatır. Bu bana davranışını etkileyen başka bir şey olduğundan şüpheleniyor. Process.Start - JBSnorro


İşte şimdi kullandığım kod. Birisi için yararlı olabileceğini düşündüm. Bir argümanı kabul eder. Argüman, çalıştırmak istediğiniz dosyanın yolunu çözen base64 kodlu bir dizedir.

 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

0
2017-12-09 04:24



OP'niz base64 kodlaması, WTF hakkında bir şey söylemiyor mu? - FizxMike
Bu cevap 6 yaşında, bu yüzden tüm detayları hatırlamıyorsam beni affet. Argümanın base64 kodunun çözülmesinin, istenmeyen karakterleri giriş dosyasının yolundan çıkarmaya yönelik bir girişim olduğuna inanıyorum. Giriş yolunun, bu kodla kullanılmadan önce kodlanmış base64 olması gerekir. Yine, bu 6 yaşında, bu yüzden o sırada olduğumdan emin değilim. Muhtemelen bunu yapmanın daha iyi bir yolu var, ama yazarken hala oldukça yeniyim. - Andrew Paglusch