If I have a separate info frame beside my main emacs frame and the info frame is

  (set-frame-parameter nil 'unsplittable t)
  (set-window-dedicated-p nil t)

and I switch to this info frame, eval the below code (M-:) and
switch to an other app then my main emacs frame is raised
automatically to the foreground when the timer runs.

switch-to-buffer should not cause emacs bringing a frame to the
foreground (and thereby interrupting the user) without the user
asking for this behavior.

GNU Emacs 27.1 (build 1, x86_64-w64-mingw32) of 2020-08-12


  (run-with-timer
   3 nil
   (lambda ()
     (with-current-buffer "*test*"
       (erase-buffer))
 
     (set-process-sentinel
      (start-process-shell-command
       "test" "*test*" "dir d:")
 
      (lambda (process event)
        (switch-to-buffer "*test*")
        (goto-char (point-min))
        ))))