Программа unace windows console application не работает
У меня есть консольное приложение, и я хотел бы запустить его как службу Windows. VS2010 имеет шаблон проекта, который позволяет присоединить консольный проект и построить сервис Windows. Я не хотел бы добавлять отдельный сервисный проект и, если возможно, интегрировать сервисный код в консольное приложение, чтобы консольное приложение оставалось как один проект, который мог бы работать как консольное приложение или как служба Windows, если он запускается, например, из командной строки с помощью переключателей.
Почему бы вам просто не создать временный сервисный проект и не скопировать биты, которые делают его сервисным?Я обычно использую следующую технику для запуска того же приложения, что и консольное приложение или как служба:
Это ожидаемо - ваша служба будет работать как отдельный процесс (так будет отображаться в диспетчере задач), но этот процесс будет контролироваться системой (например, запускаться, останавливаться, перезапускаться в соответствии с настройками службы). Если вы запустите его как консольное приложение, вы не увидите службу. Вся цель этого кода состоит в том, чтобы позволить вам запускать его либо как консольное приложение, либо как службу. Для запуска в качестве службы сначала необходимо установить ее (используя класс ServiceInstaller - см. Ссылку MSDN выше - или installuitil.exe), а затем запустить службу из панели управления. ServiceInstaller - это просто служебный класс для работы со службами Windows (немного похожий на утилиты installutil.exe или sc.exe). Вы можете использовать его для установки того, что вы хотите в качестве службы, ОС не заботится о типе проекта, который вы используете. Просто добавьте ссылку в свой проект в System.ServiceProcess, и вы сможете использовать приведенный выше кодЯ имел большой успех с TopShelf .
Из консоли диспетчера пакетов (Nuget):
Обратитесь к примерам кода, чтобы начать.
TopShelf также заботится об установке службы, которая может сэкономить много времени и удаляет стандартный код из вашего решения. Чтобы установить .exe в качестве службы, просто выполните следующее из командной строки:
Вам не нужно подключать ServiceInstaller и все такое - TopShelf сделает все за вас.
Привет, я получаю это: - "Не удалось установить пакет 'Topshelf 4.0.1'. Вы пытаетесь установить этот пакет в проект, который нацелен на '.NETFramework, Version = v4.5', но пакет не содержит никаких ссылки на сборки или файлы содержимого, совместимые с этой платформой. " что здесь не так? пожалуйста, вы можете пролить больше света на myservice.exe и из какого каталога вы собираетесь открыть командную строку @Izuagbala myservice.exe - это созданное вами консольное приложение, в которое загружается TopShelf, как показано в примере кода.Итак, вот полное прохождение:
- Создать новый проект консольного приложения (например, MyService)
- Добавьте две ссылки на библиотеку: System.ServiceProcess и System.Configuration.Install
- Добавьте три файла, напечатанные ниже
- Создайте проект и запустите «InstallUtil.exe c: \ path \ to \ MyService.exe»
- Теперь вы должны увидеть MyService в списке сервисов (запустите services.msc)
Program.cs
MyService.cs
MyServiceInstaller.cs
Это работает очень хорошо, обратите внимание, что, как говорит @snytek, если вы используете base 64, убедитесь, что вы используете правильный каталог. Кроме того, если вы делаете то же самое, что и я, и забыли переименовать службу в нечто иное, чем «MyService», обязательно удалите службу, прежде чем вносить изменения в код.Я слышал, что вы хотели, чтобы одна сборка остановила повторяющийся код, но это было бы проще и уменьшило бы повторение кода, а также упростило бы повторное использование вашего кода другими способами в будущем, если . вам нужно разбить его на 3 сборки.
- Одна сборка библиотеки, которая делает всю работу. Тогда есть два очень очень тонких / простых проекта:
- тот, который является командной строкой
- тот, который является службой Windows.
Если вы создадите рабочую службу из Visual Studio 2019, она предоставит вам практически все, что вам нужно для создания службы Windows из коробки, что также необходимо изменить в консольном приложении, чтобы преобразовать его в службу Windows.
Вот изменения, которые вам нужно сделать:
Установите следующие пакеты NuGet
Измените Program.cs для реализации, как показано ниже:
и добавьте Worker.cs, куда вы поместите код, который будет выполняться операциями службы:
Когда все готово и приложение успешно собрано , вы можете использовать sc.exe для установки exe своего консольного приложения в качестве службы Windows с помощью следующей команды:
Ты можешь использовать
И это появится в списке услуг. Я не знаю, правильно ли это работает, хотя. Служба обычно должна прослушивать несколько событий.
Однако есть несколько сервисных оболочек, которые могут запускать любое приложение как реальный сервис. Например, Microsoft SrvAny из комплекта ресурсов Win2003
Как вы говорите, служба exe должна будет общаться с Windows. +1 за ссылку на SrvAny Нет необходимости в установщиках и прочем: просто используйте эту командную строку: sc create MyServiceName binPath = "c: \ path \ to \ service \ file \ exe"Сначала я встраиваю консольное приложение в решение для службы Windows и ссылаюсь на него.
Затем я делаю консольный класс программы приложения общедоступным.
Затем я создаю две функции в консольном приложении
Затем в самой службе Windows я создаю экземпляр Программы и вызываю функции Start и Stop, добавленные в OnStart и OnStop. Увидеть ниже
Этот подход также можно использовать для гибридного приложения Windows / службы Windows.
это в основном то, что сказал JonAlb в предыдущем ответе, но спасибо за пример кодаВозможно, вам следует определить, что вам нужно, насколько я знаю, вы не можете одновременно запускать ваше приложение как консоль или службу с командной строкой. Помните, что служба установлена, и вы должны запустить ее в диспетчере служб, вы можете создать новое приложение, которое запустит службу или запустит новый процесс, выполняющий ваше консольное приложение. Но как вы написали
"сохранить консольное приложение как один проект"
Чтобы улучшить свой сервис, есть еще одна вещь, которую вы можете сделать, но это не быстро и / или легко, это использование доменов приложений и создание библиотек DLL для загрузки / выгрузки. В одном вы можете запустить новый процесс с помощью консольного приложения, а в другом dll вы можете просто добавить функциональность, которую должен выполнять сервис.
Вы должны разделить функциональность на класс или классы и запустить их через одну из двух заглушек. Заглушка консоли или служебная заглушка.
Как видно, при запуске окон множество сервисов, составляющих инфраструктуру, не (и не могут напрямую) предоставлять пользователю консольные окна. Служба должна общаться с пользователем не графическим способом: через SCM; в журнале событий, в некоторый файл журнала и т. д. Служба также должна будет обмениваться данными с окнами через SCM, в противном случае она отключится.
Очевидно, было бы приемлемо иметь какое-то консольное приложение, которое может взаимодействовать со службой, но служба должна работать независимо, без необходимости взаимодействия с графическим интерфейсом.
Заглушка консоли может быть очень полезна для отладки поведения службы, но ее не следует использовать в «производственной» среде, которая, в конце концов, является целью создания службы.
Я не прочитал это полностью, но эта статья, кажется, сдать в правильном направлении.
Я использую класс обслуживания, который следует стандартному шаблону, предписанному ServiceBase , и использую помощников для легкой отладки F5. Благодаря этому данные сервиса определяются в сервисе, что облегчает их поиск и управление жизненным циклом.
Файл unace32.exe из Unknown Company является частью unknown Product. unace32.exe, расположенный в e: \Documents and Settings \mike \Local Settings \Application Data \Bandizip \ с размером файла 77728.00 байт, версия файла Unknown Version, подпись 791F8C392884AE0E23C1B2738A22259B.
- Запустите приложение Asmwsoft Pc Optimizer.
- Потом из главного окна выберите пункт "Clean Junk Files".
- Когда появится новое окно, нажмите на кнопку "start" и дождитесь окончания поиска.
- потом нажмите на кнопку "Select All".
- нажмите на кнопку "start cleaning".
- Запустите приложение Asmwsoft Pc Optimizer.
- Потом из главного окна выберите пункт "Fix Registry problems".
- Нажмите на кнопку "select all" для проверки всех разделов реестра на наличие ошибок.
- 4. Нажмите на кнопку "Start" и подождите несколько минут в зависимости от размера файла реестра.
- После завершения поиска нажмите на кнопку "select all".
- Нажмите на кнопку "Fix selected".
P.S. Вам может потребоваться повторно выполнить эти шаги.
3- Настройка Windows для исправления критических ошибок unace32.exe:
- Нажмите правой кнопкой мыши на «Мой компьютер» на рабочем столе и выберите пункт «Свойства».
- В меню слева выберите " Advanced system settings".
- В разделе «Быстродействие» нажмите на кнопку «Параметры».
- Нажмите на вкладку "data Execution prevention".
- Выберите опцию " Turn on DEP for all programs and services . " .
- Нажмите на кнопку "add" и выберите файл unace32.exe, а затем нажмите на кнопку "open".
- Нажмите на кнопку "ok" и перезагрузите свой компьютер.
Всего голосов ( 181 ), 115 говорят, что не будут удалять, а 66 говорят, что удалят его с компьютера.
Многие начинающие пользователи сталкиваются с такой проблемой:
"Прекращена работа программы . "
И многих эта проблема раздражает.
Сейчас я вам расскажу,как справится с этой проблемой.
Подробности
Для начала разберёмся с возможными вариантами,из-за чего эта трабла возникает :
1. Установлено много стороннего ПО,которое "ест" ресурсы системы.
2. Программе не хватает оперативной памяти.
3. В системе не установлено необходимое ПО для "правильной" работы программы.
5. Проблема в самой программе.
6. При запуске программа обращается к какому-нибудь системному файлу,который может быть повреждён.
Теперь пройдёмся по каждому этому варианту:
1. Посмотрите будет ли программа вылетать в режиме "чистой" загрузки ,если в этом режиме всё нормально работает,то попробуем выявит виновника,среди всего установленного ПО, с помощью метода "половинного деления".
Зайдите в Конфигурацию системы -> Службы и включите половину служб и перезагрузитесь. Если проблема не появляется, причина в оставшихся отключенных службах. Если проблема воспроизводится, причина во включенных службах — отключите половину из них и снова перезагрузитесь. Тоже самое и для ПО в Автозагрузке.
2. Убедитесь,что у вас включён файл подкачки,для этого:
а) Нажмите Пуск –> Панель управления –> Система –> Все элементы панели управления –> Дополнительные параметры системы -> Дополнительно:
б) В разделе Быстродействие нажмите Параметр,откройте вкладку Дополнительно и нажмите Изменить;
в) И посмотрите,чтобы стояла галочка напротив надписи "Автоматически выбирать объём файла подкачки".
3. Убедитесь,что у вас установлено следующее ПО:
Для 32 (x86) bit'ных систем :
Для 64 bit'ных систем :
Потом после их установки установите все обновления,которые будут в Центре обновления Windows !
4. Проверьте систему на наличие "зловредов" с помощью Dr.Web CureIt.
5. Проблема может быть в самой программе:
а) Если у вас установлена пиратская версия программы (взломанная , RePack),то обращайтесь к тому,у кого вы ею скачали;
б) Если у вас установлена Beta-версия программы,удалите её и найдите законченную версию программы у разработчика :
в) Если у вас лицензионная версия программы,то обращайтесь в тех. поддержку производителя.
6. Определим,кто виноват в вылете программы,для этого:
а) Скачайте программу ProcDump и распакуйте её в папку C:\ProcDump;
б) Откройте командную строку от имени администратора и выполните:
- C:\ProcDump\procdump.exe -accepteula -e -w [имя сбойного приложения] C:\ProcDump\
в) Как определить имя сбойного приложения:
1) зайдите в Панель управления -> Все элементы панели управления -> Центр поддержки ->Монитор стабильности системы -> Отчеты о проблемах.
2) Найдите событие,когда вылетело проблемное приложение,щёлкните по нему 2 раза левой кнопкой мыши и там вы увидите надпись "Имя приложения:
в) Запустите это приложение и дождитесь вылета.
г) После этого у вас появится файл с расширением .dmp в C:\ProcDump
д) Теперь заглянем в это дам (заглядывать в него можно также,как и и в дампы синих экранов Анализ причин возникновения BSOD при помощи Debugging Tools for Windows (только команда выгладит по другому: Kdfe -v [путь к дампу]).
е) Как определите,что за файл виноват - определите системный ли он или принадлежит сторонней программе (для этого достаточно его "погуглить ") ,если к сторонней программе,то определите к какой и удалит её.
Если файл системный,то запустите командную строку от имени администратора и выполните команду:
Дождитесь конца проверки и:
Если в конце проверки будет написано,что все файлы были восстановлены,то перезагрузитесь для их полного восстановления.
Если в конце проверки будет написано,что не все файлы были восстановлены,то:
Если у вас Windows 8/8.1,то вам достаточно в командной строке,запущенной от имени администратора, при подключённом интернете , выполнить команду:
Если у вас Windows 7,то обратимся к другой статье ( пишется ) за помощью.
Некоторые опытные пользователи Windows жалуются, что столкнулись с неприятной проблемой: консоль управления Microsoft перестала работать. С тех пор административные надстройки, такие как «Управление дисками», «Диспетчер устройств» и «Редактор групповой политики», работать не будут. В этом посте анализируются основные причины такой ошибки и способы ее эффективного устранения.
Быстрая навигация:
Моя консоль управления Microsoft перестала работать
Вы можете перейти к домашняя страница чтобы получить полезные инструменты для решения проблем Windows на вашем ПК.
Что такое консоль управления Microsoft
Фактически, Консоль управления Microsoft (также известный как MMC) является жизненно важным компонентом операционных систем Windows, начиная с Windows 2000. Он предназначен для всех системных администраторов и опытных пользователей. Что можно делать с MMC?
- Вы можете настраивать консоль, настраивать и даже контролировать систему.
- Вы можете упростить создание, сохранение и открытие инструментов администрирования, также называемых консолями.
- Вы можете держать под контролем все программное обеспечение, оборудование и сетевые компоненты операционной системы Windows.
- Вы можете создавать различные собственные инструменты, а затем назначать их другим людям в соответствии с потребностями.
Консоль управления Microsoft может размещать оснастки (компоненты компонентной объектной модели), поскольку она предоставляет общую структуру. И большинство административных инструментов, которые вы можете найти в Windows, реализованы как оснастки MMC. В результате несколькими службами в Windows можно легко управлять в одном интерфейсе.
Консоль управления Microsoft перестала работать, ошибка
Почему консоль управления Microsoft не отвечает
Вы можете потерять контроль над такими инструментами, как «Управление компьютером», «Просмотр событий», «Планировщик задач», «Службы компонентов» и «Модули Windows PowerShell» во время работы на компьютере с Windows. Любая из оснасток может внезапно выйти из строя; когда это произойдет, вы должны подозревать, что следующие факторы ответственны за ошибку консоли управления Microsoft.
Возможная причина 1: повреждены некоторые системные файлы.
Честно говоря, повреждение данных является причиной номер один для многих ошибок на компьютере и других устройствах. Во время записи, чтения, сохранения и передачи файлов могут быть внесены непреднамеренные и неожиданные изменения, что приведет к повреждению исходных данных и возникновению ошибок.
Но, к счастью, пользователи могут восстановить поврежденные системные файлы с помощью простого сканирования SFC или DISM.
Возможная причина 2: неудачное обновление до Windows 10.
Согласно отзывам пользователей, консоль управления Microsoft перестала работать, ошибка начинает появляться время от времени после обновления до Windows 10 из более старой версии Windows. Основная причина также поврежденные файлы (необходимые файлы могут быть повреждены во время процесса и вызвать ошибку).
Возможная причина 3: проблемы с хранилищем сертификатов локального компьютера.
Многие пользователи сообщали, что система выдает им окно с ошибкой «Консоль управления Microsoft перестала работать», когда они пытаются добавить оснастку в MMC. В этом случае сбой Windows 10 кажется наиболее вероятной причиной этой ошибки.
Возможная причина 4: открытие правил для входящих подключений брандмауэра Windows.
Если вы попытаетесь открыть правила для входящих подключений брандмауэра Windows, вы также можете обнаружить, что консоль управления Microsoft не отвечает на Windows 10. Некоторые пользователи обнаруживают, что ошибка возникает в результате автоматического обновления Windows. Microsoft уже исправила такую проблему, поэтому вам следует сразу же устанавливать все ожидающие обновления Windows.
Что делать, когда консоль управления Microsoft перестала работать
Шаг 1. Проверьте файлы и сделайте резервную копию
Вот как восстановить файлы на вашем ПК с помощью MiniTool Power Data Recovery. Если вы ему не доверяете, вы можете сначала использовать пробную версию.
Что можно сделать, когда консольное приложение C ++ создает и запускает, но не запускает какой-либо код, по крайней мере, не тот, который видит отладчик? У меня есть программа с основной функцией:
Я ставлю точку останова на первой строке ( retval=0 ) и строка после него, чтобы быть в безопасности, и запустить. Он показывает окно консоли и зависает до тех пор, пока я не остановлю отладчик. Выходные данные отладки показывают количество загружаемых DLL, но не более того. Он заканчивается строкой, которая выглядит очень похожей на десятки:
Я знаю, что эта программа работает и функционирует в «нормальной» среде, потому что ее используют сотни людей, а я не изменил код. В моей среде разные вещи (потому что я переписываю наш процесс установки):
Поэтому мой вопрос: если перед первой строкой кода возникает ошибка, как я могу отследить источник проблемы?
Я не могу получить разумный стек вызовов, потому что даже если я сделаю один шаг (клавиша F10), чтобы запустить программу, она сразу же зависнет. Если я сломаюсь в этой точке, я вижу следующий стек вызовов:
Когда я удаляю изолированные параметры COM из зависимой DLL, я могу получить исключение нарушения прав доступа и остановиться на некотором коде в отладчике. Он останавливается на функции, вызываемой во время инициализации статической переменной в другой DLL. Странно то, что когда я добавляю изолированные параметры COM в первую DLL и ставлю точку останова на другую DLL, точка останова даже не срабатывает.
Решение
Оказывается, что приложение зависало во время вызова CoCreateInstance, вызванного некоторой статической логикой инициализации в одной из зависимых библиотек DLL. Я предполагаю, что хитрость заключается в том, чтобы попытаться идентифицировать статическую логику инициализации в зависимых DLL и поставить там точки останова. К сожалению, нет никаких отладочных выводов, которые помогли бы определить, какая статическая инициализация DLL выполняется когда, поэтому невозможно определить, какая DLL является проблемой.
Я спрошу о том, как определить источник зависшего вызова CoCreateInstance, в отдельном вопросе, если вопрос о нем еще не решен: Приложение зависло во время CoCreateInstance при использовании изолированного COM
Читайте также: