SystemTrayApp: updated app to add firewall option menu to allow disabling automatic firewall entry.

This commit is contained in:
Shreyas Zare
2024-05-19 15:17:43 +05:30
parent be81749b1a
commit 3c82530ddf

View File

@@ -54,6 +54,7 @@ namespace DnsServerSystemTrayApp
private ToolStripMenuItem StartServiceMenuItem; private ToolStripMenuItem StartServiceMenuItem;
private ToolStripMenuItem RestartServiceMenuItem; private ToolStripMenuItem RestartServiceMenuItem;
private ToolStripMenuItem StopServiceMenuItem; private ToolStripMenuItem StopServiceMenuItem;
private ToolStripMenuItem FirewallMenuItem;
private ToolStripMenuItem AboutMenuItem; private ToolStripMenuItem AboutMenuItem;
private ToolStripMenuItem AutoStartMenuItem; private ToolStripMenuItem AutoStartMenuItem;
private ToolStripMenuItem ExitMenuItem; private ToolStripMenuItem ExitMenuItem;
@@ -85,7 +86,7 @@ namespace DnsServerSystemTrayApp
case "--network-dns-item": case "--network-dns-item":
foreach (DnsProvider dnsProvider in _dnsProviders) foreach (DnsProvider dnsProvider in _dnsProviders)
{ {
if (dnsProvider.Name.Equals(args[1])) if ((args.Length > 1) && dnsProvider.Name.Equals(args[1]))
{ {
NetworkDnsMenuSubItem_Click(new ToolStripMenuItem(dnsProvider.Name) { Tag = dnsProvider }, EventArgs.Empty); NetworkDnsMenuSubItem_Click(new ToolStripMenuItem(dnsProvider.Name) { Tag = dnsProvider }, EventArgs.Empty);
break; break;
@@ -109,6 +110,12 @@ namespace DnsServerSystemTrayApp
StopServiceMenuItem_Click(this, EventArgs.Empty); StopServiceMenuItem_Click(this, EventArgs.Empty);
break; break;
case "--auto-firewall-entry":
if (args.Length > 1)
SetAutoFirewallEntry(bool.Parse(args[1]));
break;
case "--first-run": case "--first-run":
bool usingLoopbackAsDns = false; bool usingLoopbackAsDns = false;
@@ -224,6 +231,14 @@ namespace DnsServerSystemTrayApp
StopServiceMenuItem StopServiceMenuItem
}); });
//
// FirewallMenuItem
//
FirewallMenuItem = new ToolStripMenuItem();
FirewallMenuItem.Name = "FirewallMenuItem";
FirewallMenuItem.Text = "Auto &Firewall Entry";
FirewallMenuItem.Click += FirewallMenuItem_Click;
// //
// AboutMenuItem // AboutMenuItem
// //
@@ -254,6 +269,7 @@ namespace DnsServerSystemTrayApp
new ToolStripSeparator(), new ToolStripSeparator(),
NetworkDnsMenuItem, NetworkDnsMenuItem,
ServiceMenuItem, ServiceMenuItem,
FirewallMenuItem,
AboutMenuItem, AboutMenuItem,
new ToolStripSeparator(), new ToolStripSeparator(),
AutoStartMenuItem, AutoStartMenuItem,
@@ -438,11 +454,27 @@ namespace DnsServerSystemTrayApp
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\Interfaces\" + nic.Id, true)) using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\Interfaces\" + nic.Id, true))
{ {
if (key != null) if (key is not null)
key.SetValue("NameServer", nameServer, RegistryValueKind.String); key.SetValue("NameServer", nameServer, RegistryValueKind.String);
} }
} }
private static void SetAutoFirewallEntry(bool value)
{
try
{
using (RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Technitium\DNS Server", true))
{
if (key is not null)
key.SetValue("AutoFirewallEntry", value ? 1 : 0, RegistryValueKind.DWord);
}
}
catch (Exception ex)
{
MessageBox.Show("Error occured while setting auto firewall registry entry value. " + ex.Message, "Error - " + Resources.ServiceName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private static bool AddressExists(ICollection<IPAddress> checkAddresses, ICollection<IPAddress> addresses) private static bool AddressExists(ICollection<IPAddress> checkAddresses, ICollection<IPAddress> addresses)
{ {
foreach (IPAddress checkAddress in checkAddresses) foreach (IPAddress checkAddress in checkAddresses)
@@ -559,13 +591,32 @@ namespace DnsServerSystemTrayApp
#endregion #endregion
#region auto firewall
bool autoFirewallEntry = true;
try
{
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Technitium\DNS Server", false))
{
if (key is not null)
autoFirewallEntry = Convert.ToInt32(key.GetValue("AutoFirewallEntry", 1)) == 1;
}
}
catch
{ }
FirewallMenuItem.Checked = autoFirewallEntry;
#endregion
#region auto start #region auto start
try try
{ {
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true)) using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", false))
{ {
if (key != null) if (key is not null)
{ {
string autoStartPath = key.GetValue("Technitium DNS System Tray") as string; string autoStartPath = key.GetValue("Technitium DNS System Tray") as string;
@@ -784,6 +835,17 @@ namespace DnsServerSystemTrayApp
} }
} }
private void FirewallMenuItem_Click(object sender, EventArgs e)
{
if (!Program.IsAdmin)
{
Program.RunAsAdmin("--auto-firewall-entry " + (!FirewallMenuItem.Checked).ToString());
return;
}
SetAutoFirewallEntry(!FirewallMenuItem.Checked);
}
private void AboutMenuItem_Click(object sender, EventArgs e) private void AboutMenuItem_Click(object sender, EventArgs e)
{ {
using (frmAbout frm = new frmAbout()) using (frmAbout frm = new frmAbout())
@@ -801,7 +863,7 @@ namespace DnsServerSystemTrayApp
{ {
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true)) using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true))
{ {
if (key != null) if (key is not null)
key.DeleteValue("Technitium DNS System Tray", false); key.DeleteValue("Technitium DNS System Tray", false);
} }
} }
@@ -817,7 +879,7 @@ namespace DnsServerSystemTrayApp
{ {
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true)) using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true))
{ {
if (key != null) if (key is not null)
key.SetValue("Technitium DNS System Tray", "\"" + Program.APP_PATH + "\"", RegistryValueKind.String); key.SetValue("Technitium DNS System Tray", "\"" + Program.APP_PATH + "\"", RegistryValueKind.String);
} }
} }