Ответ 1
Я нашел эту статью, которая имеет полный класс оболочки, включенный для управления брандмауэром Windows. Добавление приложения в список исключений на брандмауэре Windows
Песочница ClickOnce не представляет никаких проблем.
У меня есть приложение, которое устанавливается и обновляется через ClickOnce. Приложение загружает файлы по FTP и поэтому должно быть добавлено в качестве исключения для брандмауэра Windows. Из-за того, как работает ClickOnce, путь к EXE изменяется с каждым обновлением, поэтому также необходимо изменить исключение. Каким будет лучший способ внести изменения в брандмауэр, чтобы он был невидимым для конечного пользователя?
(Приложение написано на С#)
Я нашел эту статью, которая имеет полный класс оболочки, включенный для управления брандмауэром Windows. Добавление приложения в список исключений на брандмауэре Windows
Песочница ClickOnce не представляет никаких проблем.
Не уверен, что это лучший способ, но работать netsh должен работать:
netsh firewall add allowedprogram C:\MyApp\MyApp.exe MyApp ENABLE
Я думаю, что для этого требуются права администратора, но по понятным причинам:)
Изменить: я просто недостаточно знаю о ClickOnce, чтобы узнать, можете ли вы запускать с него внешние программы.
Можно получить доступ к данным из брандмауэра, посмотреть следующие статьи.
Реальный вопрос заключается в том, что песочница ClickOnce допускает такой доступ? Я предполагаю, что это не так. Может быть, вы можете использовать веб-сервис? (Для получения дополнительной информации о методах доступа к данным в ClickOnce см. Доступ к локальным и удаленным данным в приложениях ClickOnce)
Мертвую ссылку на "Добавление приложения в список исключений в брандмауэре Windows" можно найти на машине Wayback:
Самый простой способ, который я знаю, - использовать netsh, вы можете просто удалить правило и воссоздать его или установить до правила порта, если ваше исправлено.
Здесь - страница, описывающая параметры контекста брандмауэра.
Ответ. Вы разрешаете только доверенное программное обеспечение работать с правами администратора. Время от времени ПО НЕКОТОРЫХ ПОЛЬЗОВАТЕЛЕЙ должно обладать правами администратора и вносить чувствительные изменения в вашу систему. В противном случае у вас может быть только жесткий диск для чтения...
Этот ответ может быть поздно. Вот что я в итоге использовал:
Предположим, что мы используем 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();
}
}
}