Automatizando o Firewall do Windows com

Tenho um aplicativo C # que usa a PORT 777 para comunicação assíncrona e a PORT 3306 para comunicação com o My Sql Server. Os problemas surgem quando as portas são bloqueadas por um firewall. Tentei criar um programa para adicionar uma exceção na lista de firewall do Windows 7.

Quando executo o programa, recebo o seguinte erro: "Falha catastrófica (exceção de HRESULT: 0x8000FFFF (E_UNEXPECTED))".

Não entendo o que esses erros significam, qualquer sugestão é bem-vinda, obrigado.

protected internal void AddExceptionToFirewall(){
    try {
        INetFwMgr fireWall = null;
        INetFwAuthorizedApplications apps = null;
        INetFwAuthorizedApplication app = null;
        Type progID = null;
        INetFwOpenPorts ports = null;
        INetFwOpenPort asyncPort = null;
        INetFwOpenPort mysqlPort = null;
        bool appFounded = false;
        bool asyncPortFounded = false;
        bool mysqlPortFounded = false;

        progID = Type.GetTypeFromProgID("HNetCfg.FwMgr");

        // checking for Windows Firewall
        fireWall = (INetFwMgr)Activator.CreateInstance(progID);
        if (fireWall.LocalPolicy.CurrentProfile.FirewallEnabled) {

            // obtain the list of authorized applications
            apps = (INetFwAuthorizedApplications)fireWall.LocalPolicy.CurrentProfile.AuthorizedApplications;
            IEnumerator appEnumerate = apps.GetEnumerator();
            while (appEnumerate.MoveNext()){
                app = (INetFwAuthorizedApplication)appEnumerate.Current;
                if (app.Name == Application.ProductName){
                    appFounded = true;
                    break;
                }
            }

            // add this application to the list of authorized applications
            if(appFounded==false){
                app.Name = Application.ProductName;
                StringBuilder strBuild = new StringBuilder();
                strBuild.Append(Application.ExecutablePath.Replace("\\","\\\\"));
                app.ProcessImageFileName = strBuild.ToString();
                app.Enabled = true;
                apps = (INetFwAuthorizedApplications)fireWall.LocalPolicy.CurrentProfile.AuthorizedApplications; 
                apps.Add(app);
            }

            // obtain the list of authorized asynchronous socket ports (777)
            ports = (INetFwOpenPorts)fireWall.LocalPolicy.CurrentProfile.GloballyOpenPorts;
            IEnumerator portEnumerate = ports.GetEnumerator();
            while (portEnumerate.MoveNext()) {
                asyncPort = (INetFwOpenPort)portEnumerate.Current;
                if (asyncPort.Port == 777) {
                    asyncPortFounded = true;
                    break;
                }
            }

            // add a port 777 to globally open ports
            if (asyncPortFounded==false) 
                ports.Add(asyncPort);


            // obtain the list of authorized mysql socket ports(3306)
            while (portEnumerate.MoveNext()) {
                mysqlPort = (INetFwOpenPort)portEnumerate.Current;
                if (mysqlPort.Port == 3306) {
                    mysqlPortFounded = true;
                    break;
                }
            }

            // add a port 3306 to globally open ports
            if (mysqlPortFounded == false)
                ports.Add(mysqlPort);

        }
    }
    catch (COMException cm) {
        MessageBox.Show(cm.Message);
    }
    catch (Exception ex) {
        MessageBox.Show(ex.Message);
    }
}

questionAnswers(6)

yourAnswerToTheQuestion