MS Edge Chromium использует стартовый процесс

Я запускаю msEdge через kernal32.CreateProcess, процесс запускается, но когда я пытаюсь взаимодействовать с начальным процессом, он завершается и запускается новый процесс. Я написал код, чтобы справиться с этим, но у меня есть код в дикой природе, на который влияет это новое поведение, и который не может взаимодействовать с процессом, поскольку он выглядит так, как будто он завершился ...

Это поведение впервые появилось в обновлении msEdge 89.0.774.57, но коллега заметил, что это происходит после перехода на версию 86.0.622.56.

В поисках помощи в том, как остановить запуск msEdge таким образом, я предполагаю, что это какой-то параметр конфигурации, который мне не хватает ...

Пример кода (извиняюсь за VB!):

      Sub Main()
       Dim processInfo As PROCESS_INFORMATION
       Dim creationFlags As Integer = CreationFlagsLocal.NORMAL_PRIORITY_CLASS Or CreationFlagsLocal.DETACHED_PROCESS

       Dim startupInfo As STARTUPINFO = New STARTUPINFO
       startupInfo.cb = Marshal.SizeOf(startupInfo)

       Dim path = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe"
       CreateProcess(Nothing, path, Nothing, Nothing, False, creationFlags, IntPtr.Zero, Nothing, startupInfo, processInfo)
       Console.WriteLine("The processID from CreateProcess was: " & processInfo.dwProcessId)
       Thread.Sleep(2000)
       Console.WriteLine("GetRunningEdgeProcessID() returns " & GetRunningEdgeProcessID())
       Dim originalPidExists = Process.GetProcesses().Any(Function(x) x.Id = processInfo.dwProcessId)
       Console.WriteLine($"PID {processInfo.dwProcessId} still exists? {originalPidExists}")
   End Sub

Код, запускающий запущенный процесс после выхода из исходного:

       Function GetRunningEdgeProcessID() As Integer
        Dim edgeProcesses = Process.GetProcessesByName("msedge")
        Dim mainProcess = edgeProcesses.FirstOrDefault(Function(x) Not String.IsNullOrEmpty(x.MainWindowTitle))
        If mainProcess IsNot Nothing Then Return mainProcess.Id
        Return -1
    End Function

Импорт CretaeProcess:

       <DllImport("kernel32.dll", CharSet:=CharSet.Unicode, SetLastError:=True)>
    Function CreateProcess(ByVal lpApplicationName As String,
      ByVal lpCommandLine As String, ByRef lpProcessAttributes As SECURITY_ATTRIBUTES,
       ByRef lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Boolean,
       ByVal dwCreationFlags As Integer, ByVal lpEnvironment As IntPtr, ByVal lpCurrentDirectory As String,
       <[In]()> ByRef lpStartupInfo As STARTUPINFO,
       <[Out]()> ByRef lpProcessInformation As PROCESS_INFORMATION) As Boolean


    End Function

1 ответ

Оказывается, процесс, запускавший msEdge, был повышен, а edge не хочет запускаться с повышенными правами, поэтому он перезапускается в обычном пользовательском контексте. Есть флаг, который позволяет Edge работать в повышенном режиме, что решает исходную проблему.

Кроме того, проблема может быть вызвана использованием функции Start-Up Boost, которую MS недавно удаленно отключила, поскольку она вызывала такие проблемы. edge://flags#edge-de-elevate-on-launch

Дополнительная литература:https://winaero.com/microsoft-edge-now-de-elevates-itself-automatically/

Другие вопросы по тегам