title: how to modify hosts file using c# with an admin rights and without manual intervention
body: <blockquote>
    <p>I've been trying with number of ways but I'm unable to avoid the alert which says 'Do you want to open the application as administrator'. can some one suggest such piece of code which avoids/handles the alert to add new entry into hosts file.
    Thanks in advance..</p>
  </blockquote>
  
  <pre><code>public bool ModifyHostsFile(string sEntryIPAddr, string sEntryURL)
      {
          try
          {
              WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
              bool administrativeMode = principal.IsInRole(WindowsBuiltInRole.Administrator);
  
              if (!administrativeMode)
              {
                  //ProcessStartInfo startInfo = new ProcessStartInfo();
                  //startInfo.Verb = "runas";
                  //startInfo.FileName = Application.ExecutablePath;
                  //Process.Start(startInfo);
                  //bool bStatus = GrantAccess(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), @"drivers\etc\hosts"));
                  using (StreamWriter w = File.AppendText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), @"drivers\etc\hosts")))
                  {
                      w.WriteLine(sEntryIPAddr + " " + sEntryURL);
                  }
                  Application.Exit();
              }
              return true;
          }
          catch (Exception ex)
          {
              Console.WriteLine(ex.Message);
              return false;
          }   
      }
  
      private bool GrantAccess(string fullPath)
      {
          DirectoryInfo dInfo = new DirectoryInfo(fullPath);
          DirectorySecurity dSecurity = dInfo.GetAccessControl();
          dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
          dInfo.SetAccessControl(dSecurity);
          return true;
      }
  </code></pre>