C# 无法安装windows服务

C# 无法安装windows服务,c#,windows-services,.net-4.0,installutil,C#,Windows Services,.net 4.0,Installutil,我使用VisualStudio2010和.Nُet4.0创建了一个非常简单的窗口服务 除了添加了安装程序外,此服务没有从默认windows服务项目添加的功能 如果我在我的dev box或域中的其他windows 2008 R2计算机上运行“installutil.exe appName.exe”,则windows服务安装不会出现问题 当我尝试在我们的客户站点上执行同样的操作时,它无法安装,出现以下错误 Microsoft (R) .NET Framework Installation utili

我使用VisualStudio2010和.Nُet4.0创建了一个非常简单的窗口服务

除了添加了安装程序外,此服务没有从默认windows服务项目添加的功能

如果我在我的dev box或域中的其他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,都是新安装的。一台机器只有.NET2.0和.NET4.0。另一个是.NET2、3、3.5和4

我是每台机器的本地管理员

我也尝试过64位安装程序,但出现了以下错误,所以我认为32位安装程序是可以使用的。
System.BadImageFormatException

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

您可以尝试为您的服务创建一个备份,并在该服务器上运行MSI文件

别忘了投赞成票。。。 请按如下方式尝试SC: 1.打开命令行 2.写下面的句子- sc create ServiceName BinPath=“ExePath”。
报告结果…

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

我也遇到了同样的问题。在我部署新版本的实用程序时,我复制了新的exe、installog文件,然后尝试卸载utils


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

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

我有这个问题,它适用于.net版本的util和我的服务。

根据上面@doublehelix的回答,我使用util for.net 2和我的服务构建与.net4一起使用,这个回答使我能够解决与Windows XP中运行的服务问题相关的特定问题(我在安全选项卡中找不到取消阻止选项)。在我的例子中,我试图从一个单独的驱动器(即与Windows不在同一驱动器上,也不在程序文件下)运行服务,尽管实际的物理磁盘是相同的。将我的服务移动到Program Files文件夹解决了我的根本问题。(我本打算对@doublehelix的答案进行“评论”,但在当前状态下,我似乎无法进行评论)。

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


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

需要取消阻止文件。或者至少这是修复我的错误的方法

在Powershell中执行“批量”解锁

get-childitem *.* | Unblock-File 
或在DOS中:

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

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

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


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

请稍候。。。.NET 4不是已经包含了.NET 2/3/3.5吗?是的,安装了所有框架的服务都是为了另一个目的,我只是想说明问题似乎与域相关。结果是[SC]CreateService成功,但服务仍然无法启动。它抱怨找不到指定的文件。我还添加了完全网络共享信任。它仍然说找不到指定的文件。这对我来说很有效,并且比“尝试安装项目”的答案更直接地回答了这个问题。两种方法都有效,但这更像是对原始问题的回答。谢谢!我怀疑我是否会得出这样的结论。我希望它报告一个比“不支持操作”更好的原因,如果它无法取消阻止并且它位于/Program Files文件夹中,则将.exe移动到documents文件夹中,在那里取消阻止,然后将其移回。Windows资源管理器不会提升/Program Files文件夹中的取消阻止请求。另一个有用的建议是:如果在提取前取消阻止zip文件,则会自动取消阻止所有提取的文件。可以帮你一个接一个地解除封锁:)天哪,这是最简单的解决办法!谢谢。根据问题,还可以在machine.config中将runtime
loadFromRemoteSources
元素设置为true。我必须转到每个文件的属性并“取消阻止”该文件。这与其说是问题的真正解决方案,不如说是一种变通方法。请参见下面投票结果较高的答案,该答案应标记为解决方案。此功能在VS中不存在2013@cja它在VS 2013中确实有效,你必须从这里@Andy安装它-救生建议就在那里,还有一个提醒,在SO帖子上滚动:)或者干脆
get childitem“C:\MyFolder”| unblock file
如果文件正在传输到另一台机器,另一种简单的方法是立即解除所有阻止,即压缩文件,在压缩文件上复制,取消阻止zip文件,然后将其解压缩。提取的文件也将被解除阻止。这是他已经做的,但这并不能解决他的问题。