Передача аргумента командной строки после установки службы с использованием c # - PullRequest
4 голосов
/ 09 июня 2011

У нас была проблема с хостингом WCF в службе в Windows 2003. Мы нашли инструмент командной строки (httpcfg), который помог нам временно решить проблему.

Следующий аргумент командной строки необходимо запустить послеустановка службы:

httpcfg set urlacl -u http://+:8080/ -a "D:(A;;GX;;;S-1-5-21-490459244-4280451753-3120260354-1829)"

Нам нужно передать этот аргумент через установщик, используя C #

То есть через служебный контроллер после события установщика.Как бы я сделал то же самое в C #, используя ServiceController?

1 Ответ

1 голос
/ 09 июня 2011

Я могу придумать два подхода:

Второй подход немного грязный, но не такой сложный. Страница PInvoke.net описывает вызов и даже дает рабочий пример:

РЕДАКТИРОВАТЬ: Некоторые заметки о проблемах очистки, вдохновленные комментарием Роба. Я поместил их здесь в этот существующий ответ, потому что они сами по себе не дают хорошего ответа.

Обратите внимание, что при любом подходе (httpcfg.exe или прямое использование HTTP-API) действительно убедитесь, что вы отменили регистрацию URL-адресов в процессе удаления.

Причина в том, что HTTP.SYS (который на самом деле является компонентом ядра) имеет только так много (не страничной) памяти, доступной для управления резервированием URL. Если вы превысите это, имея много (возможно устаревших / оставшихся) регистраций, вы получите ошибки и не сможете зарегистрировать новые URL (см. http://support.microsoft.com/kb/824033).

Хотя это «разрешимо», если вручную использовать httpcfg.exe для очистки регистраций, которые, по вашему мнению (!), Являются осиротевшими (или позволяют больше памяти - осторожно!), Это ужасная боль и совершенно ненужная, если деинсталляторы работают так, как было предложено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...