Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 43891
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 10, 20262026-05-10T15:33:59+00:00 2026-05-10T15:33:59+00:00

I have an application that is installed and updated via ClickOnce. The application downloads

  • 0

I have an application that is installed and updated via ClickOnce. The application downloads files via FTP, and therefore needs to be added as an exception to the windows firewall. Because of the way that ClickOnce works, the path to the EXE changes with every update, so the exception needs to change also. What would be the best way to have the changes made to the firewall so that it’s invisible to the end user?

(The application is written in C#)

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-10T15:34:00+00:00Added an answer on May 10, 2026 at 3:34 pm

    I found this article, which has a complete wrapper class included for manipulating the windows firewall. Adding an Application to the Exception list on the Windows Firewall

    ///   /// Allows basic access to the windows firewall API. /// This can be used to add an exception to the windows firewall /// exceptions list, so that our programs can continue to run merrily /// even when nasty windows firewall is running. /// /// Please note: It is not enforced here, but it might be a good idea /// to actually prompt the user before messing with their firewall settings, /// just as a matter of politeness. ///   ///  /// To allow the installers to authorize idiom products to work through /// the Windows Firewall. ///  public class FirewallHelper {     #region Variables     ///       /// Hooray! Singleton access.     ///       private static FirewallHelper instance = null;      ///       /// Interface to the firewall manager COM object     ///       private INetFwMgr fwMgr = null;     #endregion     #region Properties     ///       /// Singleton access to the firewallhelper object.     /// Threadsafe.     ///       public static FirewallHelper Instance     {         get         {             lock (typeof(FirewallHelper))             {                 if (instance == null)                     instance = new FirewallHelper();                 return instance;             }         }     }     #endregion     #region Constructivat0r     ///       /// Private Constructor.  If this fails, HasFirewall will return     /// false;     ///       private FirewallHelper()     {         // Get the type of HNetCfg.FwMgr, or null if an error occurred         Type fwMgrType = Type.GetTypeFromProgID('HNetCfg.FwMgr', false);          // Assume failed.         fwMgr = null;          if (fwMgrType != null)         {             try             {                 fwMgr = (INetFwMgr)Activator.CreateInstance(fwMgrType);             }             // In all other circumnstances, fwMgr is null.             catch (ArgumentException) { }             catch (NotSupportedException) { }             catch (System.Reflection.TargetInvocationException) { }             catch (MissingMethodException) { }             catch (MethodAccessException) { }             catch (MemberAccessException) { }             catch (InvalidComObjectException) { }             catch (COMException) { }             catch (TypeLoadException) { }         }     }     #endregion     #region Helper Methods     ///       /// Gets whether or not the firewall is installed on this computer.     ///       ///      public bool IsFirewallInstalled     {         get         {             if (fwMgr != null &&                   fwMgr.LocalPolicy != null &&                   fwMgr.LocalPolicy.CurrentProfile != null)                 return true;             else                 return false;         }     }      ///       /// Returns whether or not the firewall is enabled.     /// If the firewall is not installed, this returns false.     ///       public bool IsFirewallEnabled     {         get         {             if (IsFirewallInstalled && fwMgr.LocalPolicy.CurrentProfile.FirewallEnabled)                 return true;             else                 return false;         }     }      ///       /// Returns whether or not the firewall allows Application 'Exceptions'.     /// If the firewall is not installed, this returns false.     ///       ///      /// Added to allow access to this metho     ///      public bool AppAuthorizationsAllowed     {         get         {             if (IsFirewallInstalled && !fwMgr.LocalPolicy.CurrentProfile.ExceptionsNotAllowed)                 return true;             else                 return false;         }     }      ///       /// Adds an application to the list of authorized applications.     /// If the application is already authorized, does nothing.     ///       ///      ///         The full path to the application executable.  This cannot     ///         be blank, and cannot be a relative path.     ///      ///      ///         This is the name of the application, purely for display     ///         puposes in the Microsoft Security Center.     ///      ///      ///         When applicationFullPath is null OR     ///         When appName is null.     ///      ///      ///         When applicationFullPath is blank OR     ///         When appName is blank OR     ///         applicationFullPath contains invalid path characters OR     ///         applicationFullPath is not an absolute path     ///      ///      ///         If the firewall is not installed OR     ///         If the firewall does not allow specific application 'exceptions' OR     ///         Due to an exception in COM this method could not create the     ///         necessary COM types     ///      ///      ///         If no file exists at the given applicationFullPath     ///      public void GrantAuthorization(string applicationFullPath, string appName)     {         #region  Parameter checking         if (applicationFullPath == null)             throw new ArgumentNullException('applicationFullPath');         if (appName == null)             throw new ArgumentNullException('appName');         if (applicationFullPath.Trim().Length == 0)             throw new ArgumentException('applicationFullPath must not be blank');         if (applicationFullPath.Trim().Length == 0)             throw new ArgumentException('appName must not be blank');         if (applicationFullPath.IndexOfAny(Path.InvalidPathChars) >= 0)             throw new ArgumentException('applicationFullPath must not contain invalid path characters');         if (!Path.IsPathRooted(applicationFullPath))             throw new ArgumentException('applicationFullPath is not an absolute path');         if (!File.Exists(applicationFullPath))             throw new FileNotFoundException('File does not exist', applicationFullPath);         // State checking         if (!IsFirewallInstalled)             throw new FirewallHelperException('Cannot grant authorization: Firewall is not installed.');         if (!AppAuthorizationsAllowed)             throw new FirewallHelperException('Application exemptions are not allowed.');         #endregion          if (!HasAuthorization(applicationFullPath))         {             // Get the type of HNetCfg.FwMgr, or null if an error occurred             Type authAppType = Type.GetTypeFromProgID('HNetCfg.FwAuthorizedApplication', false);              // Assume failed.             INetFwAuthorizedApplication appInfo = null;              if (authAppType != null)             {                 try                 {                     appInfo = (INetFwAuthorizedApplication)Activator.CreateInstance(authAppType);                 }                 // In all other circumnstances, appInfo is null.                 catch (ArgumentException) { }                 catch (NotSupportedException) { }                 catch (System.Reflection.TargetInvocationException) { }                 catch (MissingMethodException) { }                 catch (MethodAccessException) { }                 catch (MemberAccessException) { }                 catch (InvalidComObjectException) { }                 catch (COMException) { }                 catch (TypeLoadException) { }             }              if (appInfo == null)                 throw new FirewallHelperException('Could not grant authorization: can't create INetFwAuthorizedApplication instance.');              appInfo.Name = appName;             appInfo.ProcessImageFileName = applicationFullPath;             // ...             // Use defaults for other properties of the AuthorizedApplication COM object              // Authorize this application             fwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(appInfo);         }         // otherwise it already has authorization so do nothing     }     ///       /// Removes an application to the list of authorized applications.     /// Note that the specified application must exist or a FileNotFound     /// exception will be thrown.     /// If the specified application exists but does not current have     /// authorization, this method will do nothing.     ///       ///      ///         The full path to the application executable.  This cannot     ///         be blank, and cannot be a relative path.     ///      ///      ///         When applicationFullPath is null     ///      ///      ///         When applicationFullPath is blank OR     ///         applicationFullPath contains invalid path characters OR     ///         applicationFullPath is not an absolute path     ///      ///      ///         If the firewall is not installed.     ///      ///      ///         If the specified application does not exist.     ///      public void RemoveAuthorization(string applicationFullPath)     {          #region  Parameter checking         if (applicationFullPath == null)             throw new ArgumentNullException('applicationFullPath');         if (applicationFullPath.Trim().Length == 0)             throw new ArgumentException('applicationFullPath must not be blank');         if (applicationFullPath.IndexOfAny(Path.InvalidPathChars) >= 0)             throw new ArgumentException('applicationFullPath must not contain invalid path characters');         if (!Path.IsPathRooted(applicationFullPath))             throw new ArgumentException('applicationFullPath is not an absolute path');         if (!File.Exists(applicationFullPath))             throw new FileNotFoundException('File does not exist', applicationFullPath);         // State checking         if (!IsFirewallInstalled)             throw new FirewallHelperException('Cannot remove authorization: Firewall is not installed.');         #endregion          if (HasAuthorization(applicationFullPath))         {             // Remove Authorization for this application             fwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Remove(applicationFullPath);         }         // otherwise it does not have authorization so do nothing     }     ///       /// Returns whether an application is in the list of authorized applications.     /// Note if the file does not exist, this throws a FileNotFound exception.     ///       ///      ///         The full path to the application executable.  This cannot     ///         be blank, and cannot be a relative path.     ///      ///      ///         The full path to the application executable.  This cannot     ///         be blank, and cannot be a relative path.     ///      ///      ///         When applicationFullPath is null     ///      ///      ///         When applicationFullPath is blank OR     ///         applicationFullPath contains invalid path characters OR     ///         applicationFullPath is not an absolute path     ///      ///      ///         If the firewall is not installed.     ///      ///      ///         If the specified application does not exist.     ///      public bool HasAuthorization(string applicationFullPath)     {         #region  Parameter checking         if (applicationFullPath == null)             throw new ArgumentNullException('applicationFullPath');         if (applicationFullPath.Trim().Length == 0)             throw new ArgumentException('applicationFullPath must not be blank');         if (applicationFullPath.IndexOfAny(Path.InvalidPathChars) >= 0)             throw new ArgumentException('applicationFullPath must not contain invalid path characters');         if (!Path.IsPathRooted(applicationFullPath))             throw new ArgumentException('applicationFullPath is not an absolute path');         if (!File.Exists(applicationFullPath))             throw new FileNotFoundException('File does not exist.', applicationFullPath);         // State checking         if (!IsFirewallInstalled)             throw new FirewallHelperException('Cannot remove authorization: Firewall is not installed.');          #endregion          // Locate Authorization for this application         foreach (string appName in GetAuthorizedAppPaths())         {             // Paths on windows file systems are not case sensitive.             if (appName.ToLower() == applicationFullPath.ToLower())                 return true;         }          // Failed to locate the given app.         return false;      }      ///       /// Retrieves a collection of paths to applications that are authorized.     ///       ///      ///      ///         If the Firewall is not installed.     ///        public ICollection GetAuthorizedAppPaths()     {         // State checking         if (!IsFirewallInstalled)             throw new FirewallHelperException('Cannot remove authorization: Firewall is not installed.');          ArrayList list = new ArrayList();         //  Collect the paths of all authorized applications         foreach (INetFwAuthorizedApplication app in fwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications)             list.Add(app.ProcessImageFileName);          return list;     }     #endregion }  ///   /// Describes a FirewallHelperException. ///   ///  /// ///  public class FirewallHelperException : System.Exception {     ///       /// Construct a new FirewallHelperException     ///       ///      public FirewallHelperException(string message)       : base(message)     { } } 

    The ClickOnce sandbox did not present any problems.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 58k
  • Answers 58k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • added an answer I had the same problem not long ago. Since my… May 11, 2026 at 8:53 am
  • added an answer I would do it this way: final InputStream stream; stream… May 11, 2026 at 8:53 am
  • added an answer Yes, you are right, and you got the explanation right… May 11, 2026 at 8:53 am

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.