Этот участок кода вызывает много замечаний:
1) Если есть метод, не бросающий исключения (например, TryParse), то нужно использовать его.
2) Не нужно перехватывать исключение общего типа, если Вам известно какие именно исключения производных типов могут появиться.
3) Не нужно выбрасывать исключения общего типа (наподобие Exception или AppicationException), вместо этого следует выбросить подходящее исключение специального (производного) типа, а если его нет, то написать его.
4) При перехвате исключения, если Вы решаете бросить другое исключение, исходное нужно передать ему в конструктор, чтобы оно было доступно через свойство InnerException.
5) Локальные переменные рекомендуется писать в camel-стиле (то есть, с маленькой буквы).
6) Не нужно заводить неиспользуемые локальные переменные (Err).
7) Нужно проводить более тщательную валидацию входных параметров (в частности, период нужно проверить на положительность).
Здравствуйте, SMV77, Вы писали:
SMV>Условие SMV>Для нормального запуска сервиса необходимы параметры...
SMV>Если параметры отсутствуют или они некорректны сервис не должен запускаться вообще...
SMV>Сейчас разбор входящих параметров делаю в методе OnStart(). SMV>Но это решение мне не нравиться...
SMV>Как ещё можно решить эту проблему?
Здравствуйте, SMV77, Вы писали:
SMV>Условие SMV>Для нормального запуска сервиса необходимы параметры...
SMV>Если параметры отсутствуют или они некорректны сервис не должен запускаться вообще...
SMV>Сейчас разбор входящих параметров делаю в методе OnStart(). SMV>Но это решение мне не нравиться...
Сорри, дополняю...
static int Main(string[] args)
{
#region разбираем параметры запуска сервиса
if (args.Length == 0)
{
throw new Exception("Не заданы параметры для запуска сервиса");
}
if (args.Length != 2)
{
throw new Exception("Неверное число параметров для запуска сервиса");
}
try
{
_period = double.Parse(args[0]);
_path2listener = args[1];
}
catch (Exception Err)
{
throw new Exception("Параметр 'Период запроса' задан некорректным значением");
}
#endregion
}
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Здравствуйте, SMV77, Вы писали:
SMV>>Сейчас разбор входящих параметров делаю в методе OnStart(). SMV>>Но это решение мне не нравиться...
KV>А чем не нравится-то?
не нравиться тем что генериться исключение которое ни где потом в моём коде не отлавливается...
Здравствуйте, SMV77, Вы писали:
SMV>Здравствуйте, kochetkov.vladimir, Вы писали:
KV>>Здравствуйте, SMV77, Вы писали:
SMV>>>Сейчас разбор входящих параметров делаю в методе OnStart(). SMV>>>Но это решение мне не нравиться...
KV>>А чем не нравится-то?
SMV>не нравиться тем что генериться исключение которое ни где потом в моём коде не отлавливается...
Я может туплю к концу дня — но зачем дальше отлавливать это исключение?
Здравствуйте, SMV77, Вы писали:
SMV>Условие SMV>Для нормального запуска сервиса необходимы параметры...
SMV>Если параметры отсутствуют или они некорректны сервис не должен запускаться вообще...
SMV>Сейчас разбор входящих параметров делаю в методе OnStart(). SMV>Но это решение мне не нравиться...
ты не те параметры анализируешь, в onstart передаются параметры которые были указаны вручную из окошка свойств сервиса, там есть поле воода "Start parameters:", вот то что там будет введено и передается в OnStart при ручном запуске сервиса.
Чтобы анализировать параметры переданные в командной строке нужно анализировать аргументы метода Main
При этом прийдется написать свой инсталлер для сервиса, т.к. стандартный инсталлер не поддерживает параметры для запуска сервиса. Все что нужно — добавить к строке с исполняемым файлом строчку с параметрами...
_M_>ты не те параметры анализируешь, в onstart передаются параметры которые были указаны вручную из окошка свойств сервиса, там есть поле воода "Start parameters:", вот то что там будет введено и передается в OnStart при ручном запуске сервиса.
_M_>Чтобы анализировать параметры переданные в командной строке нужно анализировать аргументы метода Main
_M_>При этом прийдется написать свой инсталлер для сервиса, т.к. стандартный инсталлер не поддерживает параметры для запуска сервиса. Все что нужно — добавить к строке с исполняемым файлом строчку с параметрами...
Еще неизвестно какие параметры нужны автору темы...
Здравствуйте, nikov, Вы писали:
N>Этот участок кода вызывает много замечаний: N>1) Если есть метод, не бросающий исключения (например, TryParse), то нужно использовать его. N>2) Не нужно перехватывать исключение общего типа, если Вам известно какие именно исключения производных типов могут появиться. N>3) Не нужно выбрасывать исключения общего типа (наподобие Exception или AppicationException), вместо этого следует выбросить подходящее исключение специального (производного) типа, а если его нет, то написать его. N>4) При перехвате исключения, если Вы решаете бросить другое исключение, исходное нужно передать ему в конструктор, чтобы оно было доступно через свойство InnerException. N>5) Локальные переменные рекомендуется писать в camel-стиле (то есть, с маленькой буквы). N>6) Не нужно заводить неиспользуемые локальные переменные (Err). N>7) Нужно проводить более тщательную валидацию входных параметров (в частности, период нужно проверить на положительность).
KV>>А чем не нравится-то?
SMV>не нравиться тем что генериться исключение которое ни где потом в моём коде не отлавливается...
1) Сделай наследника от Exception который бы определял вид исключения при отсутстствии параметров
типа
class MissingStartupParametersException:Exception
{
private _MissedParam;
public MissingStartupParametersException(string Message):base(Message)
public MissingStartupParametersException(string MissdeParam, string Message):base(Message)
public MissingStartupParametersException(string MissdeParam, string Message,Exception InnerException):base(Message,InnerException)
public string MissedParam
{
get{return _MissedParam;}
}
}
2)Т.к из виндовго сервайса эксепшены никто твои отловить не сможет кроме самой винды но на верхнем уровне сервайса все эксепшены кидай в
лог, ну а далее уже на любителя.. анализируй логи,отправляй на сервер где они будут анализироваться автоматически и т.п.