Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C#应用程序移植到Mono时,需要使用FirewallAPI。有单声道等效的吗?_C#_Mono_Windows Firewall_Windows Firewall Api - Fatal编程技术网

将C#应用程序移植到Mono时,需要使用FirewallAPI。有单声道等效的吗?

将C#应用程序移植到Mono时,需要使用FirewallAPI。有单声道等效的吗?,c#,mono,windows-firewall,windows-firewall-api,C#,Mono,Windows Firewall,Windows Firewall Api,我已经编写了一个Windows服务,我需要将其移植到Mono,以便它可以在Mac/Linux平台上使用 它使用FirewallAPI.dll(我认为这是实际名称…)。其他名称为NetFwTypeLb、NATUPNPLib和NETCONLib 我一直在谷歌上搜索,试图找到一种在Mac/Linux平台上实现这一点的方法,但我找不到可以用来实现这一点的方法 这可能吗?结合另一个问题:Mac/Linux平台是否允许轻松安装和运行服务(我认为另一种称为“守护进程”) 谢谢, 马德琳 请注意,这是我当前使用

我已经编写了一个Windows服务,我需要将其移植到Mono,以便它可以在Mac/Linux平台上使用

它使用FirewallAPI.dll(我认为这是实际名称…)。其他名称为NetFwTypeLb、NATUPNPLib和NETCONLib

我一直在谷歌上搜索,试图找到一种在Mac/Linux平台上实现这一点的方法,但我找不到可以用来实现这一点的方法

这可能吗?结合另一个问题:Mac/Linux平台是否允许轻松安装和运行服务(我认为另一种称为“守护进程”)

谢谢, 马德琳

请注意,这是我当前使用的代码,我是从另一个StackOverflow问题中得到的:

public class Firewall
{
    public static INetFwMgr WinFirewallManager()
    {
        Type type = Type.GetTypeFromCLSID(
            new Guid("{304CE942-6E39-40D8-943A-B913C40C9CD4}"));
        return Activator.CreateInstance(type) as INetFwMgr;
    }
    public bool AuthorizeProgram(string title, string path,
        NET_FW_SCOPE_ scope, NET_FW_IP_VERSION_ ipver)
    {
        Type type = Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication");
        INetFwAuthorizedApplication authapp = Activator.CreateInstance(type)
            as INetFwAuthorizedApplication;

        authapp.Name = title;
        authapp.ProcessImageFileName = path;
        authapp.Scope = scope;
        authapp.IpVersion = ipver;
        authapp.Enabled = true;

        EventLog.WriteEntry("MachineVerification", authapp.Name + " " + authapp.Scope + " " + authapp.IpVersion);

        INetFwMgr mgr = WinFirewallManager();
        try
        {
            mgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(authapp);

            EventLog.WriteEntry("MachineVerification", authapp.Name + " " + authapp.Scope + " " + authapp.IpVersion);
        }
        catch (Exception ex)
        {
            EventLog.WriteEntry("MachineVerification", "MROW!" + ex.Message);
            return false;
        }
        return true;
    }
}

当我弄明白的时候,我忘了回答这个问题

在OSX上,不需要设置防火墙例外。OSX将要求用户授予您的应用程序访问internet的权限


虽然我对Linux不太清楚,但Linux上的Mono覆盖率要高很多,所以我肯定以前有人回答过Linux的这个问题。

对于守护进程,请查看
Mono服务(它是用Mono构建的)