Как отключить сетевое подключение из .NET без прав администратора?

Я могу быть SOL в этом, но я подумал, что выброшу его для возможных решений.

Я пишу службу контроля доступа к компьютеру, чтобы помочь мне контролировать использование компьютера моими детьми. Планируйте открыть исходный код, когда он у меня заработает. Он написан на VB.Net и должен работать на версиях от XP до 7.

Я сталкиваюсь со всевозможными проблемами безопасности и доступа к рабочему столу в Windows 7. Службу необходимо запустить от имени администратора, чтобы выполнить команду NetSh для отключения сети. Но я не могу взаимодействовать с рабочим столом из службы, поэтому я подключаюсь к пользовательскому интерфейсу для обработки других вещей, но я все еще не могу определить из службы, заблокирован ли рабочий стол. Ааааа!

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

Это бесполезно, если ребенок входит в систему и отрицает всплывающее окно с вопросом, должна ли программа работать от имени администратора, а он говорит нет. Также Windows 7 не запустит программу, установленную для запуска от имени администратора, используя
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Кто-нибудь знает, как заставить это работать? Или есть нестандартное решение?


person Brad Mathews    schedule 02.04.2010    source источник
comment
Ну, просто исправление этого вызвало одну идею. Если немного IPC в порядке, то немного больше не помешает. Поэтому я попытался заставить службу запрашивать пользовательский интерфейс, заблокирован ли компьютер. Это сработало. Мне все еще нужен способ избежать проблем с UAC. Я определенно мог бы упростить некоторые вещи.   -  person Brad Mathews    schedule 03.04.2010


Ответы (1)


Я хотел бы предоставить некоторые ссылки, но сейчас я терплю неудачу в своем google-fu... но я почти уверен, что UAC не применяется к службам. Если вы реализуете свою программу как сервисное приложение Windows вместо (скрытого) приложения Windows Forms и настроите его для работы с учетными записями ваших детей, а не с вашими собственными, это должно работать.

ОБНОВИТЬ

Нашел это в Google, но вообще не пробовал. Выглядит солидно... в основном, CreateProcessAsUser для запуска приложения форм из вашего служебного приложения, работающего от имени администратора.

person Tanzelax    schedule 03.04.2010
comment
Это применимо, если вы делаете что-то, что мешает UAC, например, выполняете команду Netsh, которая изменяет сетевые настройки. Это работает только при запуске под правами администратора. Я запускаю службу с правами администратора прямо сейчас, так что это работает. Если бы я мог запустить приложение форм с правами администратора без всплывающего окна UAC, как я могу сделать со службой, все мои проблемы исчезли бы. - person Brad Mathews; 03.04.2010
comment
@Брэд, да, я думаю, ты уже делал все, что я изначально предлагал. : p Я нашел другую ссылку, которая может решить вашу проблему, обновил свой ответ. - person Tanzelax; 03.04.2010
comment
Сладкий! Это решает мою насущную проблему, как вызвать Netsh без необходимости запуска от имени администратора. И это решает проблему, от которой я отказался, заключающуюся в том, как запустить пользовательский интерфейс из службы. Я хочу, чтобы моя служба перезапустила пользовательский интерфейс, если она была закрыта, и пользовательский интерфейс перезапустил службу, если она была закрыта. Я мог заставить работать только последний. Не хочу, чтобы дети обходили контроль доступа, просто убивая процесс! - person Brad Mathews; 03.04.2010
comment
Я хочу добавить предупреждение об использовании этой техники подрыва UAC. Поскольку вы запускаете новое приложение под учетной записью SYSTEM, вы также наследуете все ограничения этой учетной записи. А именно, нет доступа к сети. ТАНСТАФЛ. - person Brad Mathews; 05.04.2010