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:
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:
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.
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 });
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);
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.
İş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