无法安装Windows服务


76

我已经使用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

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


等等.... NET 4是否已不包括.NET 2/3 / 3.5?
卡米洛·马丁

是的,安装了所有框架的服务用于其他目的,我只是在想这个问题似乎与域相关。
马修·道尔顿

Answers:


-2

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


12
这不是真正解决问题的方法,而是解决方法
thepirat000 2013年

10
看到下面的投票答案,它应该被真正标记为解决方案
Andy

1
VS 2013中不存在此功能
2014年

2
@cja在VS 2013中确实有效,您必须从此处安装visualstudiogallery.msdn.microsoft.com/…–
Stefan P.

2
@Andy-救生建议在那里,也提醒您继续滚动SO帖子:)
Tommy

282

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


12
这对我有用,比“尝试安装项目”答案更直接地回答了问题。两者都起作用,但这很可能是原始问题的答案。
MKing 2011年

5
谢谢!我怀疑我是否会得出这个结论。我希望它报告的原因比“不支持操作”更好的原因
Ross Hambrick

10
如果它不会取消阻止并且位于您的/ Program Files文件夹中,则将.exe移至您的documents文件夹,在该文件夹中取消阻止,然后将其移回。Windows资源管理器不会在/ Program Files文件夹中提升取消阻止请求。
Snives

21
另一个有用的建议:如果在解压缩前取消压缩zip文件,则所有解压缩的文件都会自动解除锁定。可以节省您一个接一个的解锁工作:)
doublehelix 2012年

2
哎呀,这是最简单的解决方法!谢谢。
c00000fd

16

需要取消阻止文件。或至少这是固定的。

在Powershell中进行“批量”解锁

get-childitem *.* | Unblock-File 

或在DOS中:

FOR %a in (*.*) do (echo.>%a:Zone.Identifier)

或者干脆get-childitem "C:\MyFolder" | unblock-file
皮特英国人

如果文件正在传输到另一台计算机上,则一次取消全部锁定的另一种简便方法是将文件压缩,复制到zip文件,解除对zip文件的锁定,然后将其解压缩。提取的文件也将被解除阻止。
cdhowie

10

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


2
根据问题stackoverflow.com/questions/8524423/…,也可以loadFromRemoteSources在machine.config中将运行时元素设置为true。
2012年

我必须转到每个文件的属性并“取消阻止”文件。
Trevor Daniel

9

当我们从另一台计算机复制可执行文件时,Windows在其上标记一个标志以进行保护。右键单击可执行文件,然后在属性中单击“取消阻止”。它将清除标志,并且服务可执行文件将安装。


2

别忘了投票...请按以下步骤尝试SC:1.打开命令行2.编写以下脚本,创建ServiceName BinPath =“ ExePath”。报告结果...


结果为[SC] CreateService成功,但是该服务仍然无法启动。它抱怨找不到指定的文件。
马修·道尔顿

我还添加了完整的网络共享信任。仍然说找不到指定的文件。
Srikanth P Vasist

1

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

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


1

我有这个问题,它适用于.net版本的util和我的服务之间的差异
我将util用于.net 2和我的服务使用.net4


1

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

installutil C:\...\MyService\bin\Debug\MyService.exe

1
那是他已经做过的,但不能解决他的问题。
Sascha

0

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

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


0

根据上述@doublehelix的回答,此答案使我能够跟踪与Windows XP中运行的服务问题有关的特定问题(“取消阻止”不是我可以在安全选项卡中找到的选项)。就我而言,尽管实际的物理磁盘是相同的,但我尝试从单独的驱动器(即,与Windows不在同一驱动器上,也不在程序文件下)运行服务。将我的服务移到Program Files文件夹中,解决了我的基本问题。(我打算对@doublehelix的答案进行“评论”,但我似乎无法保持当前状态)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.