Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我是否安装了我的服务(运行时比加载的运行时更新)?_C#_.net_Windows Services_Failed Installation - Fatal编程技术网

C# 为什么可以';我是否安装了我的服务(运行时比加载的运行时更新)?

C# 为什么可以';我是否安装了我的服务(运行时比加载的运行时更新)?,c#,.net,windows-services,failed-installation,C#,.net,Windows Services,Failed Installation,因此,我在C#中构建了一个服务,并尝试使用以下命令来安装它: C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\installutil.exe MyService.exe >> installLog.txt 它失败了。当我查看installLog.txt时,我得到以下信息: Microsoft (R) .NET Framework Installation utility Version 2.0.50727.3053 Copyright

因此,我在C#中构建了一个服务,并尝试使用以下命令来安装它:

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\installutil.exe MyService.exe >> installLog.txt
它失败了。当我查看installLog.txt时,我得到以下信息:

Microsoft (R) .NET Framework Installation utility Version 2.0.50727.3053
Copyright (c) Microsoft Corporation.  All rights reserved.

Exception occurred while initializing the installation:
System.BadImageFormatException: Could not load file or assembly 'file:///C:\MyService.exe' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded..
同样的方法适用于安装不同的部件。我觉得这可能是因为失败的是为.NET4.0编写的,而有效的是在3.5中


有人有过这个问题的经验吗?

我相信你在问题中给出了答案:

“此程序集是由比当前加载的运行时更新的运行时生成的,无法加载…”

因此,您可能已经使用较新的函数(在较新的框架中)编译了运行时,但您正在注册它的计算机运行的是较低版本

例如,为.NET3.5编译,但在.NET2.0上安装该服务是没有意义的


既然您能够在目标计算机上安装服务,我想您已经是管理员了。因此,只需升级该服务计算机上的.NET framework。

您是否尝试过在包含Windows服务的目录中的命令提示符窗口中键入
MyService.exe/install
?这在过去对我很有效。您还可以使用
MyService.exe/uninstall

卸载Windows服务如果您的应用程序是基于.Net 4.0构建的,那么您使用的installutil.exe是错误的。使用4.0文件夹中的installutil.exe

对于x86:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe

对于x64:


C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe

甚至没有人能得到这个

以下是我必须做的:

  • 右键单击Visual Studio中的服务项目,转到“属性”
  • 将“启动对象”设置为服务的名称(已将其设置为值“(未设置)”
  • 保存
  • 建造
  • 请尝试重新安装
  • 它起作用了!耶!我们都可以回家了
    链接到有帮助的:

    对于那些没有发现这可以解决问题的人,您需要查看.vdproj文件的启动条件并将.NET framework更改为4:

    如果您在x64机器上编译,请确保进入Configuration Mgr并将生成更改为x64。当然,您需要检查以确保使用的InstallUtil.exe版本正确。运气好。

    我也有同样的问题。最初,我的项目位于我的项目的调试文件夹中的D:\上的一个很长的路径中。 当我将.exe服务文件移动到另一个路径较短的位置并以“C:\”开头时,问题就解决了

    我还使用此批处理文件安装my services

    @ECHO OFF
    
    REM Directory for .NET 4. Check for other version directories.
    set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319
    set PATH=%PATH%;%DOTNETFX2%
    
    echo Installing MyService...
    echo ---------------------------------------------------
    InstallUtil /i C:\ServiceFolder\MyService.exe
    echo ---------------------------------------------------
    echo Done.
    pause
    

    对我来说,我只是右键单击我试图安装的exe,然后单击“取消阻止”

    如果您尝试了上述所有操作,但仍然看到相同的错误,请仔细检查您是否有32位应用程序或任何32位DLL,并且您的服务器是64位服务器

    同样的问题,上面的内容对windows server 2019没有帮助

    尝试运行兼容性测试,之后注册突然生效:

    为此浪费了一个小时,我所要做的就是为服务路径添加引号

    步骤1)cd C:\Windows\Microsoft.NET\Framework\v4.0.30319

    在引号中添加.exe路径的目录,如图所示

    步骤2)InstallUtil.exe“E:\MyNewService\MyNewService\bin\Debug\MyNewService.exe”



    ref:

    如果您在.net 4.0中构建了安装程序,则必须将.net 4部署到服务器,但我可以在Visual Studio中构建项目本身。这不意味着.NET 4.0已经安装了吗?只是尝试安装它-它已经安装。这不是32/64位的问题,是吗?我已经尝试了32和64位版本的installutil;这两个都不管用。哦,其他人也发表了评论。我不知道这是一个.NET4.0项目,而且机器上安装了.NET4.0。我正在尝试在我一直在编码的同一台机器上安装-我认为如果这是一个问题,它会更早出现。但是你使用2.0安装服务吗?“\Framework64\v2.0.50727\installutil.exe”我使用这个:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe情况并非如此,请参见上面答案下的注释。从.NET 2.0升级到4.0时,我遇到了同样的问题。除了缺少启动对象之外,安装和部署项目还将.NET 2.0作为先决条件引用。我需要在“先决条件”对话框中更新对.Net 4.0的引用,并将我的.Net Framework引导程序更新为4.0。我从未理解MS“技术”:-(。对我有用,谢谢。除了xr280xr之外,还有一个提示:如果您的Visual Studio在XP(x86)上运行并且您为Windows 7x64创建了一个包含32位代码的安装程序包,在编译时,您会收到一条警告,告诉您框架版本不匹配-您可以忽略此消息。为x64 CPU设置安装程序,但针对x86 CPU或任何CPU的项目(您的代码)(除非您有32位第三方DLL)要使它在Windows 7x64上正确运行,这是它对我唯一有效的方式…我如何使它成为default“installutil.exe”?@louisrhys将4.0 framework目录添加到您的路径中。如果您只想更改visual studio命令提示符的if,您可以修改系统路径,使其适用于所有cmd提示符或vcvarsall.bat。@DarrylBraaten…这是解决方案:)小心,因为您必须确保您的目标是x86或x64—在这种情况下,
    …\Framework64\…
    不是正确的路径。对于x86,您将使用以下选项:
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe
    。如果您尝试在构建中使用不正确的体系结构,您也会遇到此错误,即使框架版本看起来是正确的。谢谢!是的,我还转换了一个2.0项目,直到你指出它,我才发现它。这不是一般的