Как запустить браузер с зарегистрированной учетной записью, используя CreateProcessAsUser? - PullRequest
0 голосов
/ 31 августа 2018

вот мой вопрос: Я создал сервис, заимствовал, продублировал токен для запуска браузера с помощью CreateProcessAsUser, пока он работает нормально. Но если я заранее вошел в учетную запись Google, браузер, запущенный CreateProcessAsUser, не будет авторизован. Я надеюсь запустить браузер как обычное поведение пользователя и не знаю, как его решить. Ниже приведен мой код:

GetSessionId(sessionId, ref returnLog, out targetSessionId);
uint targetProcessId = uint.MinValue;

   if (!FindTargetProcessId(targetSessionId, targetProcessName, ref returnLog, out targetProcessId))
   {
      ////break
   }

   secAttr.Length = Marshal.SizeOf(secAttr);
   secAttr.InheritHandle = false;

   if (!DupProcessToken(targetProcessId, ref secAttr, ref returnLog, out targetProcessDupToken))
   {
       goto _exit;
   }

   StartupInfo startupInfoForAsUser = new StartupInfo();
   startupInfoForAsUser.Flags = (int)StartupInfoFlags.StartUseStdHandles;
   startupInfoForAsUser.CB = Marshal.SizeOf(startupInfoForAsUser);
   startupInfoForAsUser.Desktop = targetDesktopName;

   if (!WindowsAdvapi32API.CreateProcessAsUserWrapper(targetProcessDupToken, fullPathName, commandLine, ref secAttr, ref secAttr, 
            secAttr.InheritHandle, WindowsAdvapi32API.CreationFlags.None, IntPtr.Zero, workingDir, ref startupInfoForAsUser, out processId, out newProcessHandle))
   {
            ......
   }

  [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    private static extern bool CreateProcessAsUser(
        IntPtr token,
        string applicationName,
        string commandLine,
        ref SecurityAttributes processAttributes,
        ref SecurityAttributes threadAttributes,
        bool inheritHandles,
        uint creationFlags,
        IntPtr environment,
        string currentDirectory,
        ref StartupInfo startupInfo,
        out ProcessInformation processInformation);

[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern bool DuplicateTokenEx(
        IntPtr existingToken,
        uint desiredAccess,
        ref SecurityAttributes tokenAttributes,
        SecurityImPersonationLevel impersonationLevel,
        TokenType tokenType,
        out IntPtr newToken);
...