Подтвердить что ты не робот

Программно добавить приложение в брандмауэр Windows

У меня есть приложение, которое устанавливается и обновляется через ClickOnce. Приложение загружает файлы по FTP и поэтому должно быть добавлено в качестве исключения для брандмауэра Windows. Из-за того, как работает ClickOnce, путь к EXE изменяется с каждым обновлением, поэтому также необходимо изменить исключение. Каким будет лучший способ внести изменения в брандмауэр, чтобы он был невидимым для конечного пользователя?

(Приложение написано на С#)

4b9b3361

Ответ 2

Не уверен, что это лучший способ, но работать netsh должен работать:

netsh firewall add allowedprogram C:\MyApp\MyApp.exe MyApp ENABLE

Я думаю, что для этого требуются права администратора, но по понятным причинам:)

Изменить: я просто недостаточно знаю о ClickOnce, чтобы узнать, можете ли вы запускать с него внешние программы.

Ответ 3

Можно получить доступ к данным из брандмауэра, посмотреть следующие статьи.

Реальный вопрос заключается в том, что песочница ClickOnce допускает такой доступ? Я предполагаю, что это не так. Может быть, вы можете использовать веб-сервис? (Для получения дополнительной информации о методах доступа к данным в ClickOnce см. Доступ к локальным и удаленным данным в приложениях ClickOnce)

Ответ 5

Самый простой способ, который я знаю, - использовать netsh, вы можете просто удалить правило и воссоздать его или установить до правила порта, если ваше исправлено.
Здесь - страница, описывающая параметры контекста брандмауэра.

Ответ 6

Ответ. Вы разрешаете только доверенное программное обеспечение работать с правами администратора. Время от времени ПО НЕКОТОРЫХ ПОЛЬЗОВАТЕЛЕЙ должно обладать правами администратора и вносить чувствительные изменения в вашу систему. В противном случае у вас может быть только жесткий диск для чтения...

Ответ 8

Предположим, что мы используем Visual Studio Installer- > Setup Project. Для установки в сборке необходимо установить класс установщика, а затем убедитесь, что вы добавили настраиваемое действие для "Первичного вывода" на этапе установки.

using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.IO;
using System.Diagnostics;

namespace YourNamespace
{
    [RunInstaller(true)]
    public class AddFirewallExceptionInstaller : Installer
    {
        protected override void OnAfterInstall(IDictionary savedState)
        {
            base.OnAfterInstall(savedState);

            var path = Path.GetDirectoryName(Context.Parameters["assemblypath"]);
            OpenFirewallForProgram(Path.Combine(path, "YourExe.exe"),
                                   "Your program name for display");
        }

        private static void OpenFirewallForProgram(string exeFileName, string displayName)
        {
            var proc = Process.Start(
                new ProcessStartInfo
                    {
                        FileName = "netsh",
                        Arguments =
                            string.Format(
                                "firewall add allowedprogram program=\"{0}\" name=\"{1}\" profile=\"ALL\"",
                                exeFileName, displayName),
                        WindowStyle = ProcessWindowStyle.Hidden
                    });
            proc.WaitForExit();
        }
    }
}