BornToBeRoot/NETworkManager · error · Exception

Process could not be started!

Error message

Process could not be started!

What it means

PuTTYControl.Connect() starts the PuTTY executable with Process.Start(info) and embeds its window. Process.Start returns null when the process could not be launched (e.g. the file does not exist or the shell could not execute it), and the control then throws this generic Exception, which is caught and shown in a message box. It signals that no PuTTY process was created, so the session cannot be embedded.

Solutions

  1. Open Settings > PuTTY (or the session settings) and set the correct full path to putty.exe; verify the file exists at that path.
  2. Use the bundled PuTTY via Scripts/external or download the official putty.exe and point ApplicationFilePath at it.
  3. Check antivirus/AppLocker logs to confirm putty.exe is not being blocked from executing.
  4. Reconnect the tab after fixing the path — the control supports Reconnect() which will retry Connect().

Example fix

// before (caller-side check)
session.ApplicationFilePath = "putty.exe";
// after
var puttyPath = @"C:\Tools\putty.exe";
if (!File.Exists(puttyPath))
    throw new FileNotFoundException("putty.exe not found", puttyPath);
session.ApplicationFilePath = puttyPath;
Defensive patterns

Strategy: validation

Validate before calling

var path = sessionInfo.ApplicationFilePath;
bool canStart = !string.IsNullOrWhiteSpace(path) && File.Exists(path);

Type guard

static bool HasExecutable(string path) => !string.IsNullOrWhiteSpace(path) && File.Exists(path) && Path.GetExtension(path).Equals(".exe", StringComparison.OrdinalIgnoreCase);

Try / catch

try
{
    await Connect();
}
catch (Exception ex) when (ex.Message == "Process could not be started!")
{
    MessageBox.Show($"PuTTY executable not found or blocked: {settings.PuTTYPath}", "Error");
}

Prevention

When it happens

Trigger: Process.Start returns null in Connect() — which happens when the configured ApplicationFilePath (e.g. putty.exe) is missing, invalid, blocked, or cannot be executed on the current system.

Common situations: Portable NETworkManager installs where PuTTY.exe was not downloaded or was moved; an empty or wrong path in the PuTTY application settings; antivirus or AppLocker blocking putty.exe; running on a machine where the bundled/executable path does not resolve.

Related errors


AI-assisted analysis of BornToBeRoot/NETworkManager@2780d65469 (2026-09-12). Data as JSON: /api/errors/841fbe05d2654dc2. Report an issue: GitHub.

Appendix: source

Thrown at Source/NETworkManager/Controls/PuTTYControl.xaml.cs:222

                        IsConnected = true;

                        // Resize after short delay — not applied immediately
                        await Task.Delay(250);

                        ResizeEmbeddedWindow();

                        // Correct DPI if PuTTY started at a different DPI than our panel
                        var currentPanelDpi = NativeMethods.GetDpiForWindow(WindowHost.Handle);

                        if (initialWindowDpi != currentPanelDpi)
                            NativeMethods.TrySendDpiChangedMessage(_appWin, initialWindowDpi, currentPanelDpi);
                    }
                }
            }
            else
            {
                throw new Exception("Process could not be started!");
            }
        }
        catch (Exception ex)
        {
            if (!_closed)
                // Use built-in message box because we have visual issues in the dragablz window
                MessageBox.Show(ex.Message, Strings.Error, MessageBoxButton.OK, MessageBoxImage.Error);
        }

        IsConnecting = false;
    }

    private void Process_Exited(object sender, EventArgs e)
    {
        // This happens when the user exit the process
        IsConnected = false;
    }

View on GitHub (pinned to 2780d65469)