diff --git a/HelpersLib/AdapterInfo.cs b/HelpersLib/AdapterInfo.cs index 61e4bd261..a0f659b87 100644 --- a/HelpersLib/AdapterInfo.cs +++ b/HelpersLib/AdapterInfo.cs @@ -81,40 +81,29 @@ public string[] GetDNS() return (string[])adapter["DnsServerSearchOrder"]; } - public bool SetDNS(string primary, string secondary) + public uint SetDNS(string primary, string secondary) { - try + using (ManagementBaseObject parameters = adapter.GetMethodParameters("SetDNSServerSearchOrder")) { - using (ManagementBaseObject parameters = adapter.GetMethodParameters("SetDNSServerSearchOrder")) + if (primary == null || secondary == null) { - if (parameters != null) - { - if (primary == null || secondary == null) - { - // Obtain DNS server address automatically - parameters["DNSServerSearchOrder"] = null; - } - else - { - parameters["DNSServerSearchOrder"] = new string[] { primary, secondary }; - } + // Obtain DNS server address automatically + parameters["DNSServerSearchOrder"] = null; + } + else + { + parameters["DNSServerSearchOrder"] = new string[] { primary, secondary }; + } - using (ManagementBaseObject result = adapter.InvokeMethod("SetDNSServerSearchOrder", parameters, null)) - { - return (uint)result["ReturnValue"] == 0; - } - } + // http://msdn.microsoft.com/en-us/library/aa393295(v=vs.85).aspx + using (ManagementBaseObject result = adapter.InvokeMethod("SetDNSServerSearchOrder", parameters, null)) + { + return (uint)result["ReturnValue"]; } } - catch (Exception e) - { - DebugHelper.WriteException(e); - } - - return false; } - public bool SetDNSAutomatic() + public uint SetDNSAutomatic() { return SetDNS(null, null); } diff --git a/HelpersLib/Forms/DNSChangerForm.cs b/HelpersLib/Forms/DNSChangerForm.cs index c06066659..b69e177d1 100644 --- a/HelpersLib/Forms/DNSChangerForm.cs +++ b/HelpersLib/Forms/DNSChangerForm.cs @@ -129,27 +129,46 @@ private void btnSave_Click(object sender, EventArgs e) if (adapter != null) { - bool result = false; + uint result; - if (cbAutomatic.Checked) + try { - result = adapter.SetDNSAutomatic(); - } - else - { - string primaryDNS = txtPreferredDNS.Text.Trim(); - string secondaryDNS = txtAlternateDNS.Text.Trim(); - - if (Helpers.IsValidIPAddress(primaryDNS) && Helpers.IsValidIPAddress(secondaryDNS)) + if (cbAutomatic.Checked) { - result = adapter.SetDNS(primaryDNS, secondaryDNS); + result = adapter.SetDNSAutomatic(); + } + else + { + string primaryDNS = txtPreferredDNS.Text.Trim(); + string secondaryDNS = txtAlternateDNS.Text.Trim(); + + if (Helpers.IsValidIPAddress(primaryDNS) && Helpers.IsValidIPAddress(secondaryDNS)) + { + result = adapter.SetDNS(primaryDNS, secondaryDNS); + } + else + { + throw new Exception("Not valid ip address."); + } + } + + if (result == 0) + { + NativeMethods.DnsFlushResolverCache(); + MessageBox.Show("DNS successfully set.", "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else if (result == 1) + { + MessageBox.Show("DNS successfully set. Reboot is required.", "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else if (result > 1) + { + MessageBox.Show("DNS set failed with error code: " + result, "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Error); } } - - if (result) + catch (Exception ex) { - NativeMethods.DnsFlushResolverCache(); - MessageBox.Show("DNS successfully set.", "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Information); + MessageBox.Show("DNS set failed.\r\n" + ex.ToString(), "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }