Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions Knossos.NET/Classes/FsoBuild.cs
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,22 @@ public async Task<FsoResult> RunFSO(FsoExecType executableType, string cmdline,
return null;
}

/// <summary>
/// Gets a all valid executables for the OS/Cpu arch
/// </summary>
/// <returns>List<FsoFile> or null</returns>
public List<FsoFile>? GetExecutables()
{
if (directExec != null)
{
return null;
}

var validExecs = executables.Where(b => b.isValid);

return validExecs?.ToList();
}

/// <summary>
/// Return the fsofile executable fullpath
/// </summary>
Expand Down
46 changes: 46 additions & 0 deletions Knossos.NET/Classes/KnUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1252,5 +1252,51 @@ public static void CreateDesktopShortcut(string shortcutName, string destFileFul
Log.Add(Log.LogSeverity.Error, "KnUtils.CreateDesktopShortcut()", ex);
}
}

/// <summary>
/// Add windows firewall exception for a executable
/// </summary>
/// <param name="programPath"></param>
/// <param name="ruleName"></param>
/// <returns>true/false</returns>
public static bool AddFirewallException(string programPath, string ruleName)
{
if (!isWindows)
{
Log.Add(Log.LogSeverity.Error, "KnUtils.AddFirewallExceptions()", "This function is only supported on Windows.");
return false;
}
try
{
var startInfo = new ProcessStartInfo
{
FileName = "netsh",
Arguments = $"advfirewall firewall add rule name=\"{ruleName}\" dir=in action=allow program=\"{programPath.Replace("/", "\\")}\" enable=yes",
UseShellExecute = true,
Verb = "runas",
WindowStyle = ProcessWindowStyle.Hidden
};

using (var process = Process.Start(startInfo))
{
process?.WaitForExit();
if (process?.ExitCode == 0)
{
Log.Add(Log.LogSeverity.Information, "KnUtils.AddFirewallExceptions()", "Added new Firewall Rules for : " + ruleName);
return true;
}
else
{
Log.Add(Log.LogSeverity.Error, "KnUtils.AddFirewallExceptions()", "Failed to add Firewall Rules for : " + ruleName + ". Error code was: " + process?.ExitCode);
return false;
}
}
}
catch (Exception ex)
{
Log.Add(Log.LogSeverity.Error, "KnUtils.AddFirewallExceptions()", ex);
return false;
}
}
}
}
15 changes: 15 additions & 0 deletions Knossos.NET/ViewModels/Templates/Tasks/InstallBuild.cs
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,21 @@ public partial class TaskItemViewModel : ViewModelBase
IsCompleted = true;
CancelButtonVisible = false;

//Add firewall rules (windows)
if (KnUtils.IsWindows)
{
var executables = newBuild.GetExecutables();
if (executables != null && executables.Any())
{
foreach (var executable in executables)
{
var fp = newBuild.GetExecutablePath(executable);
if (fp != null)
_ = Task.Factory.StartNew(() => KnUtils.AddFirewallException(fp, "Knossos " + newBuild.ToString()));
}
}
}

//Re-run Dependencies checks
MainWindowViewModel.Instance?.RunModStatusChecks();

Expand Down