Ho provato a scrivere al volo un metodo di esempio.
L'ho testato con Notepad e mi funziona, poi vedi te se va col tuo eseguibile (exe diretto, non bat)
/// <summary>
/// Manda in esecuzione un file eseguibile
/// </summary>
/// <param name="exePath">Path dell'eseguibile</param>
private void RunExe(string exePath)
{
// Verifichiamo i parametri
if (string.IsNullOrEmpty(exePath)) throw new ArgumentNullException(nameof(exePath));
if (!File.Exists(exePath)) throw new FileNotFoundException("File to execute not found", exePath);
// Avvio del processo (puoi impostare tutti i parametri che ti servono)
var process = Process.Start(new ProcessStartInfo
{
FileName = exePath,
WindowStyle = ProcessWindowStyle.Maximized,
CreateNoWindow = true
});
// Attendiamo che si avvii la finestra, massimo 2 secondi
process.WaitForInputIdle(2000);
// Prendiamo la main window
var mainWin = IntPtr.Zero;
while (mainWin == IntPtr.Zero)
{
if (process.HasExited) break;
mainWin = process.MainWindowHandle;
}
// La rendiamo visibile
if (mainWin != IntPtr.Zero)
{
SetForegroundWindow(mainWin);
}
}
// Funzione per impostare la finestra di foreground
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);