Не удается установить службу Windows
Я создал очень простой оконный сервис с использованием Visual Studio 2010 и.NُET 4.0.
Эта служба не имеет функциональности, добавленной из проекта службы Windows по умолчанию, за исключением добавления установщика.
Если я запускаю "installutil.exe appName.exe" на моем устройстве dev или других компьютерах с Windows 2008 R2 в нашем домене, служба Windows устанавливается без проблем.
Когда я пытаюсь сделать то же самое на нашем сайте для клиентов, он не может быть установлен со следующей ошибкой.
Microsoft (R) .NET Framework Installation utility Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Exception occurred while initializing the installation:
System.IO.FileLoadException: Could not load file or assembly 'file:///C:\TestService\WindowsService1.exe' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515).
Это решение имеет только 1 проект и никаких добавленных зависимостей.
Я пробовал это на нескольких машинах в нашей среде и двух на наших клиентах. Машины все Windows 2008 R2, обе свежие установки. Одна машина имеет только.net 2.0 и.net 4.0. Остальные.net 2, 3, 3,5 и 4.
Я являюсь локальным администратором на каждой из машин.
Я также попробовал 64-битный установщик, но получил следующую ошибку, так что я думаю, что 32-битный - тот, который нужно использовать.System.BadImageFormatException
Любое руководство будет оценено. Благодарю.
13 ответов
Вы можете попытаться создать проект установки для своей службы и запустить файл MSI на этом сервере.
Другая причина этой ошибки может заключаться в том, что вы скопировали свою программу из источника, который Windows считает ненадежным. Вы можете разблокировать сборку, нажав "разблокировать" после того, как вы щелкнете правой кнопкой мыши и выберите свойства файла.
Нужно разблокировать файлы. или, по крайней мере, это то, что исправило мое.
Чтобы сделать "массовую" разблокировку в Powershell
get-childitem *.* | Unblock-File
или в DOS:
FOR %a in (*.*) do (echo.>%a:Zone.Identifier)
Когда мы копируем исполняемый файл с другого компьютера, Windows помечает на них флажок для защиты. Щелкните правой кнопкой мыши на исполняемый файл и в свойствах нажмите Разблокировать. Было бы снято флажок, а служба выполнила бы Install.
Эта проблема возникла у меня, потому что я пытался установить службу из сетевого расположения. Скопировав service.exe на локальный компьютер перед использованием installutil, он устранил мою проблему и служба была успешно установлена.
Не забудьте проголосовать... Попробуйте СЦ следующим образом: 1. откройте командную строку 2. напишите ниже созданное имя службы BinPath= "ExePath". отчет о результатах...
У меня есть эта проблема, и это для разных.NET версии утилиты и моего сервиса
я использую утилиту для.net 2 и мой сервис сборки с.net4
Я также столкнулся с той же проблемой. В моем случае я развертывал новую версию утилит, я копировал новые exe, установочные файлы и затем пытался удалить утилиты.
Я скопировал обратно старую версию, удалил утилиты, скопировал новую версию и снова установил ее. В любом случае, это логическая последовательность, которой я должен был следовать в первую очередь.
В моем случае эта ошибка была вызвана случайной передачей каталога, содержащего службу, InstallUtil вместо передачи exe службы.
Очевидно человеческая ошибка, но я нашел сообщение об ошибке весьма вводящим в заблуждение.
Вы можете использовать эту команду в командной строке разработчика запустить администратор
installutil C:\...\MyService\bin\Debug\MyService.exe
Разблокировка файлов сделала свою работу здесь. Странно то, что заблокированные файлы пришли из подписанного установщика, запущенного с правами администратора. Приходилось разблокировать сразу несколько файлов в нескольких папках.
Я использовал следующие настройки реестра, чтобы добавить контекстные меню в папку или файл, когда
Shift + right-click
нажата (она не отображается, если просто щелкнуть правой кнопкой мыши).
Кредиты и ссылки на автора в каждом блоке кода.
Настройка папки :
Просто сохраните как
ShiftUnblockFolder.reg
и импортировать в реестр.
Windows Registry Editor Version 5.00
; Created by: Shawn Brink
; Created on: March 17th 2019
; Tutorial: https://www.tenforums.com/tutorials/129101-add-unblock-file-context-menu-windows-10-a.html
[HKCR\Directory\shell\unblock]
"MUIVerb"="Unblock"
"Extended"=""
"SubCommands"=""
[HKCR\Directory\shell\unblock\shell\001flyout]
"MUIVerb"="Unblock files only in this folder"
[HKCR\Directory\shell\unblock\shell\001flyout\command]
@="powershell.exe get-childitem -LiteralPath '%L' | Unblock-File"
[HKCR\Directory\shell\unblock\shell\002flyout]
"MUIVerb"="Unblock files in this folder and subfolders"
[HKCR\Directory\shell\unblock\shell\002flyout\command]
@="powershell.exe get-childitem -LiteralPath '%L' -recurse | Unblock-File"
Настройка одного файла :
ShiftUnblockFile.reg
Windows Registry Editor Version 5.00
; Created by: Shawn Brink
; Created on: March 17th 2019
; Tutorial: https://www.tenforums.com/tutorials/129101-add-unblock-file-context-menu-windows-10-a.html
[HKCR\*\shell\unblock]
"MUIVerb"="Unblock"
"Extended"=""
[HKCR\*\shell\unblock\command]
@="powershell.exe Unblock-File -LiteralPath '%L'"
[HKCR\Directory\shell\unblock]
"MUIVerb"="Unblock"
"Extended"=""
"SubCommands"=""
[HKCR\Directory\shell\unblock\shell\001flyout]
"MUIVerb"="Unblock files only in this folder"
[HKCR\Directory\shell\unblock\shell\001flyout\command]
@="powershell.exe get-childitem -LiteralPath '%L' | Unblock-File"
[HKCR\Directory\shell\unblock\shell\002flyout]
"MUIVerb"="Unblock files in this folder and subfolders"
[HKCR\Directory\shell\unblock\shell\002flyout\command]
@="powershell.exe get-childitem -LiteralPath '%L' -recurse | Unblock-File"
Просто щелкните правой кнопкой мыши файлы службы и выберите свойства, а затем установите флажок разблокировать.
Согласно ответу @doublehelix, приведенному выше, этот ответ помог мне решить мою конкретную проблему, связанную с проблемой службы, работающей в Windows XP (разблокировка не доступна на вкладке "Безопасность", которую я могу найти). В моем случае я пытался запустить службу с отдельного диска (то есть не на том же диске, что и Windows, и не в программных файлах), хотя реальный физический диск был таким же. Перемещение моего сервиса в папку Program Files решило основную проблему. (Я намеревался "прокомментировать" ответ @doublehelix, но, похоже, я не в состоянии в моем текущем статусе).