Я пытаюсь использовать код, который работает локально, но он не работает на моем облачном экземпляре. Я предполагаю, что это могут быть связанные с разрешениями, но я пока не могу это исправить. Вот то, что у меня есть, что работает, когда я отлаживаю свою рабочую роль локально, но ничего не происходит, когда она публикуется (в стадии постановки сейчас).Как правильно изменить правила брандмауэра в коде на экземпляре роли рабочего?
string strCmdText = string.Format("advfirewall firewall add rule name=\"BlockU\" protocol=any dir=in action=block remoteip={0}", ip);
ProcessStartInfo psi = new ProcessStartInfo("netsh.exe", strCmdText);
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
try
{
Process.Start(psi);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
Я также попытался с помощью
psi.Verb = "runas";
, но это не помогло.
Наконец, я попробовал api firewall так. Это также работало локально, но в последней строке было отказано в доступе к ошибке.
INetFwRule2 inboundRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
inboundRule.Enabled = true;
inboundRule.RemoteAddresses = ip;
inboundRule.InterfaceTypes = "All";
inboundRule.Protocol = (int)NetFwTypeLib.NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_ANY;
inboundRule.Name = "BlockU Part 2";
//inboundRule.Profiles = currentProfiles;
inboundRule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK;
// Now add the rule
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Add(inboundRule);
я нашел ответ через старый пост только сейчас. Я не запускал его как администратор, это специальный сервис (я считаю). –
Попробуйте запустить роль wroker с правами администратора, измените файл csdef и добавьте следующее: <Исполнение исполненияContext = "повышенный" /> – yantaq