79

我使用 Visual Studio 2010 和 .NُET 4.0 创建了一个非常简单的窗口服务。

该服务没有从默认的 Windows 服务项目中添加任何功能,只是添加了一个安装程序。

如果我在我的开发盒或我们域中的其他 Windows 2008 R2 机器上运行“installutil.exe appName.exe”,则 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

任何指导将不胜感激。谢谢。

4

12 回答 12

287

此错误的另一个原因可能是您从 Windows 认为不受信任的源中复制了程序。右键单击并选择文件的属性后,您可以通过单击“取消阻止”来取消阻止程序集。

于 2011-03-09T12:44:15.473 回答
20

需要解锁文件。或者至少那是固定我的。

在 Powershell 中进行“批量”解锁

get-childitem *.* | Unblock-File 

或在 DOS 中:

FOR %a in (*.*) do (echo.>%a:Zone.Identifier)
于 2016-07-22T03:51:15.960 回答
13

当我们从另一台计算机复制可执行文件时,Windows 会在它们上标记一个标志以进行保护。右键单击可执行文件并在属性中单击Unblock。它将清除标志和服务可执行文件将安装。

于 2017-02-21T14:36:45.823 回答
10

这个问题对我来说是因为我试图从网络位置安装服务。通过在使用 installutil 之前将 service.exe 复制到本地计算机,它解决了我的问题并成功安装了服务。

于 2012-02-02T01:40:40.227 回答
2

不要忘记投票...按以下方式尝试SC:1.打开命令行2.编写以下内容-sc create ServiceName BinPath =“ExePath”。报告结果...

于 2010-11-10T10:04:25.340 回答
1

我有这个问题,它与 .net 版本的 util 和我的服务之间的不同
我将 util 用于 .net 2,而我的服务使用 .net4 构建

于 2012-06-13T10:37:13.087 回答
1

我也面临同样的问题。就我而言,我正在部署新版本的实用程序,我复制了新的 exe、installog 文件,然后尝试卸载实用程序。

我复制回旧版本,卸载 utils,复制新版本并再次安装。无论如何,这是我应该首先遵循的逻辑顺序。

于 2012-01-31T20:18:36.290 回答
1

在我的情况下,此错误是由于意外将包含服务的目录传递给 InstallUtil 而不是传递服务 exe 引起的。

显然是人为错误,但我发现错误消息非常具有误导性。

于 2014-09-25T17:12:54.893 回答
1

您可以在开发人员命令提示符下使用此命令运行管理员

installutil C:\...\MyService\bin\Debug\MyService.exe
于 2016-08-02T12:53:09.303 回答
0

根据上面@doublehelix 的回复,这个答案让我找到了与在 Windows XP 中运行的服务问题相关的特定问题(我可以找到的安全选项卡中没有取消阻止选项)。在我的情况下,我试图从单独的驱动器运行服务(即不在与 Windows 相同的驱动器上,也不在程序文件下),尽管实际的物理磁盘是相同的。将我的服务移动到 Program Files 文件夹中解决了我的根本问题。(我打算对@doublehelix 的回答进行“评论”,但我目前的状态似乎无法做到)。

于 2012-09-05T10:52:58.497 回答
0

只需右键单击您的服务文件并选择属性,然后选中取消阻止复选框

https://brianseekford.azurewebsites.net/2011/07/13/hresult-0x80131515-when-running-installutil-to-install-a-net-service/

于 2022-01-03T02:49:28.663 回答
-2

您可以尝试为您的服务创建一个安装项目并在该服务器上运行 MSI 文件。

于 2010-11-10T09:50:33.113 回答