Dodanie aplikacji do wyjątków zapory w Win10

0

Znacie może jakiś skuteczny sposób na dodanie aplikacji do wyjątków zapory z poziomu aplikacji?
Pytam o zaporę w Windows 10. W sieci jest masa sposobów, które dodają aplikację np w WinXP, ale niestety nie działają na Win10. Procedura się wykonuje bezbłędnie (w sensie bez żadnych komunikatów o błędzie), ale aplikacja nie jest dodawana do listy.
Delphi 2007.

1

Podstawowe pytanie czy program jest uruchamiany z prawami admina?

Poniższy kod działa na Windows 10 (sprawdzone na maszynie wirtualnej) ale oczywiście wymaga praw admina:

{$APPTYPE CONSOLE}


uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;

procedure AddExceptionToFirewall(Const Caption, Executable: String;Port : Word);
const
NET_FW_PROFILE2_DOMAIN  = 1;
NET_FW_PROFILE2_PRIVATE = 2;
NET_FW_PROFILE2_PUBLIC  = 4;

NET_FW_IP_PROTOCOL_TCP = 6;
NET_FW_ACTION_ALLOW    = 1;
NET_FW_RULE_DIR_IN  = 1;
NET_FW_RULE_DIR_OUT = 2;
var
  fwPolicy2      : OleVariant;
  RulesObject    : OleVariant;
  Profile        : Integer;
  NewRule        : OleVariant;
begin
  Profile             := NET_FW_PROFILE2_PRIVATE OR NET_FW_PROFILE2_PUBLIC;
  fwPolicy2           := CreateOleObject('HNetCfg.FwPolicy2');
  RulesObject         := fwPolicy2.Rules;
  NewRule             := CreateOleObject('HNetCfg.FWRule');
  NewRule.Name        := Caption;
  NewRule.Description := Caption;
  NewRule.Applicationname := Executable;
  NewRule.Protocol := NET_FW_IP_PROTOCOL_TCP;
  NewRule.LocalPorts :=  Port;
  NewRule.Direction := NET_FW_RULE_DIR_OUT;
  NewRule.Enabled := TRUE;
  NewRule.Grouping := 'My Group';
  NewRule.Profiles := Profile;
  NewRule.Action := NET_FW_ACTION_ALLOW;
  RulesObject.Add(NewRule);
end;

begin
 try
    CoInitialize(nil);
    try
      AddExceptionToFirewall('MyAppRule','MyApp.exe', 3307);
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;

Kod pochodzi z http://stackoverflow.com/questions/20066467/how-to-open-port-in-win7-firewall-using-delphi

0

Dzięki. Sprawdzę to jutro.

A jak sprawić, żeby aplikacja domyślnie uruchamiała się z upr. administratora? Mam na myśli taki sposób, żeby użytkownik końcowy nie musiał niczego konfigurować sam. Po prostu instaluje aplikację, uruchamia ją i ona już uruchamia się z uprawnieniami umożliwiającymi automatyczne dodanie jej samej do listy wyjątków.

1

Może byś tak kuknął do dokumentacji? Albo ustawić uprawnienia w ustawieniach projektu, a jeśli takowe nie istnieją to ręcznie utworzyć plik manifestu i dodać go do całego projektu; Tu masz nawet tutorial:

0

Nie wiem czy w Delphi 2007 jest taka opcja Project -> Options -> Application zaznacz Enable Administrator Privileges a jak nie ma takiej opcji to musisz sam przygotować odpowiedni manifest. Tutaj wprawdzie dla (Delphi 7 ale w 2007 będzie tak samo) jest opisane jak http://stackoverflow.com/questions/14703013/adding-manifest-for-admin-rights-request a jak nie zrozumiesz to pytaj.

0

Ja myślę, że dobrą praktyką, jest dodanie takiej opcji do instalatora. Dla mnie aplikacja dodająca wyjątki do zapory to budzi podejrzenia.

Dodatkowo zapora sama pyta czy pozwolić na dostęp. Pomijam fakt, że błędne może być przekonanie, ze wyjątek w zaporze rozwiąże problemy gdzie teraz prawie każdy antywirus ma swoją własną zaporę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1