2015-09-28 1 views
2

Я пытаюсь использовать код, который работает локально, но он не работает на моем облачном экземпляре. Я предполагаю, что это могут быть связанные с разрешениями, но я пока не могу это исправить. Вот то, что у меня есть, что работает, когда я отлаживаю свою рабочую роль локально, но ничего не происходит, когда она публикуется (в стадии постановки сейчас).Как правильно изменить правила брандмауэра в коде на экземпляре роли рабочего?

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); 
+0

я нашел ответ через старый пост только сейчас. Я не запускал его как администратор, это специальный сервис (я считаю). –

+2

Попробуйте запустить роль wroker с правами администратора, измените файл csdef и добавьте следующее: <Исполнение исполненияContext = "повышенный" /> – yantaq

ответ

2

я нашел более на azure forums, что мне нужно для того, чтобы мой работник роли работать с повышенными привилегиями. Это может быть сделано в файле ServiceDefinition.csdef, добавив следующий атрибут к элементу WorkerRole

<WorkerRole name="CloudService.Worker" vmsize="ExtraSmall" 
      enableNativeCodeExecution="true"> 

, а также путем добавления элемента

<Runtime executionContext="elevated" /> 

внутри элемента WorkerRole.

Оба набора кода успешно выполнялись с изменениями конфигурации.

0

Я нашел интересный пост в блогах MSDN, которая использует библиотеку, которая упрощает конфигурацию правила брандмауэра, может быть, это позволит решить проблему,

http://blogs.msdn.com/b/securitytools/archive/2009/08/21/automating-windows-firewall-settings-with-c.aspx

на

+1

Я ценю ссылку - это может помочь другим, которые останавливаются здесь. Это библиотека, которую я использую в своем втором примере. Фактическая .dll для этой библиотеки уже была загружена на моем компьютере в c: \ windows \ system32 \ FirewallAPI.dll. Надеюсь, это тоже поможет кому-то. –

Смежные вопросы