Ошибка 1001 при установке пользовательской службы Windows

Я написал службу Windows, которая работает в Framework 4.0 и работает в VS 2015. Я также создал проект установки (бесплатная версия Installshield).

Моя служба не отображалась в разделе services.msc после того, как я ее установил, поэтому, согласно некоторым другим сообщениям, мне пришлось отмечать первичный вывод в InstallShield как "класс установщика", но когда я это делаю, я получаю Error 1001, когда я запускаю setup.exe.

В этом сообщении указано, что "Код ошибки 1001 ВСЕГДА означает сбой в пользовательском действии класса Installer" . и что я не должен использовать пользовательские действия. На данный момент я не использую никаких пользовательских действий.

В большинстве решений на этом сайте есть инструкции для Installshield 2010, и этапы не работают в 2015 году.

Ошибка появляется как на моей машине dev, так и на всех клиентских машинах. Любые предложения?

EDIT:

Средство просмотра событий отображает "Не удалось создать точку восстановления (Process = C:\Windows\system32\msiexec.exe/V; Описание = Установленное имя моего приложения, Error = 0x80070422).

Ответ 1

Я нашел кое-что, чтобы избавиться от проблемы, но он создает новый вопрос, хотя и гораздо более простой и менее критичный.

Что вызвало мою проблему, так это то, что мне пришлось удалить следующий код из моего ServiceInstaller AfterInstall:

new ServiceController(ServiceInstaller.ServiceName).Start();

Это было добавлено для автоматического запуска моей службы после ее установки. На данный момент я просто запускаю сервис вручную.

Ответ 2

У меня была такая же проблема. Внезапно после обновления до VisualStudio 2013 и нового InstallShield LE и создания моих пакетов установки они потерпят неудачу с критической ошибкой 1001.

Окончательный ответ

Я нашел окончательный ответ. У вас больше не может быть установлен флажок "класс установщика", выбранный в InstallShieldLE. Вы должны снять флажок.

Чтобы открыть это диалоговое окно, откройте Укажите данные приложения > Файлы и щелкните правой кнопкой мыши на своем основном выводе и выберите "Свойства".

снять флажок Installer Class

Раньше у вас должно было быть выбранное: теперь он не должен быть выбран

Раньше (Visual Studio 2012 и до того, как вы должны были выбрать этот элемент или установка сервиса завершилась неудачно. Это ужасно.

Теперь вам нужно перейти к следующему элементу дерева в проекте InstallShield LE и дважды щелкнуть Службы node: services  node

После этого появится пункт "Службы" слева (я упомянул, какой ужасный UX и пользовательский интерфейс все это?) и щелкните правой кнопкой мыши, чтобы вы могли добавить службу.

добавить сервис

Выберите пункт меню, который добавит услугу, и вы получите форму, которая позволит вам настроить данные установщика.

сведения об установке

Как только вы это сделаете и перестройте свою MSI, она будет работать, и это устранит ошибку 1001.

Это была ужасная трата времени, которую могли решить оригинальные InstallShield Devs. Несчастная.

Ответ 3

Если на вашей машине сборки установлен .NET 4.6, вам понадобится версия ограниченного выпуска 2015 года, чтобы избежать ошибки версий с поддержкой InstallShield для классов установщика. (Существует множество причин ошибки 1001, поэтому это не гарантированное исправление.) Обратите внимание, что InstallShield 2015 Limited Edition не поддерживает версию сообщества Visual Studio.

Ответ 4

Надеемся, это поможет некоторым из вас столкнуться с ошибкой 1001 при попытке установить .NET-службу Windows с помощью программы установки InstallShield 2015 LE с исходным выходом, установленным в качестве установщика.

Это известная ошибка, когда .NET 4.6 установлена ​​в Windows 10.

https://flexeracommunity.force.com/customer/articles/en_US/ISSUE/HOTFIX-Install-Fails-With-Error-1001-When-a-NET-Installer-Class-Component-is-Present-in-InstallShield-2015-SP1

Ответ 5

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

Если вы хотите автозапуск после установки, вы можете перейти к шагу 3. Настроить целевую систему. Перейдите на вкладку "Службы". Щелкните правой кнопкой мыши Службы и добавьте Сервис. Вы должны иметь возможность находить любую услугу в своем основном выпуске. После добавления вы можете выбрать различные настройки, связанные с автоматическим запуском и т.д. Надеюсь, это поможет вам.

На стороне заметки, я все еще ищу ответ на мой 1001.

Ответ 6

Эта ошибка возникает, когда целевая платформа .NET не установлена.

Если вы настраиваете таргетинг на одну машину разработки, проверьте, действительно ли эта служба (EXE) уже запущена на этом компьютере или нет (она не должна работать).

Ответ 7

Я использую VS 2012 с InstallShield LE 2015 с таргетингом на .NET 4.5, и мне нужно снять флажок "класс установщика", чтобы он работал.

Ответ 8

После некоторого копания я узнал, что установщик не справляется с этой ошибкой при попытке удалить службу (связанную с тем, что вы устанавливаете) - И (служба) больше не существует. Мой сценарий использования - Запустите установку из MVS2015 комплексного решения, которое также включает службу Windows. Когда вы меняете версию решения, установщик останавливается в своих поисках, обнаружив, что ваше приложение было установлено до и не может удалить его, поскольку это другая версия. Появится диалоговое окно с сообщением об этом и выйдет... НО ЭТО НЕ УДАЛИТЬ сервис. Теперь попытка установки или удаления завершилась с ошибкой 1001, потому что окна не обнаруживают, что служба удаляет ее.

Если у кого-то есть лучшее решение, отправьте его, но мое решение - использовать утилиту командной строки sc. sc - это утилита, которая может использоваться для управления услугами из командной строки (тип sc для справки). Поэтому я использую sc для добавления службы (по имени), а затем я могу удалить или установить как обычно. Обязательно иметь допустимый путь к бункеру в команде, но будет принят ЛЮБОЙ допустимый путь.

sc <server> create [service name] [binPath= ] <option1> <option2>...

Пример:

sc create MyService binPath= C:\Windows\explorer.exe
[SC] CreateService SUCCESS