web-dev-qa-db-ja.com

サービスをインストールできないのはなぜですか(ランタイムがロードされたランタイムよりも新しい)。

したがって、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..

同じ方法で、別のアセンブリをインストールできます。失敗するのは.NET 4.0用に書かれていて、機能するのは3.5にあるためだと思います。

誰かがこの問題について何か経験がありますか?

25
SuperNES

誰もこれを手に入れようとはしませんでした!

これが私がしなければならなかったことです:

  1. Visual Studioでサービスプロジェクトを右クリックし、[プロパティ]に移動します
  2. 「スタートアップオブジェクト」をサービスの名前に設定します(値「(未設定)」に設定されていました)。
  3. セーブ。
  4. ビルド
  5. もう一度インストールしてみてください。
  6. できます!わーい!みんな帰れる!

コードプロジェクト記事 へのリンク:

26
SuperNES

アプリケーションが.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

42
Darryl Braaten

これで問題が解決されない場合は、.vdprojファイルの起動条件を調べ、.NETフレームワークを4に変更する必要があります http://www.alexjamesbrown.com/ uncategorized/deploying-net-4-project-error-1001-system-badimageformatexception /

15
Stu

X64マシンでコンパイルする場合は、必ず構成マネージャーに移動して、ビルドをx64に変更してください。もちろん、InstallUtil.exeの正しいバージョンを使用していることを確認する必要があります。幸運。

5
oj_n

私にとっては、私がインストールしようとしていたexeファイルを右クリックして「ブロック解除」をクリックしました

5
user3447136

私はあなたがあなたの質問に答えを提供すると信じています:

「このアセンブリは、現在ロードされているランタイムよりも新しいランタイムによってビルドされており、ロードできません。」

そのため、新しい関数(新しいフレームワークにある)を使用してランタイムをコンパイルした可能性がありますが、それを登録しているコンピューターはより低いバージョンを実行しています。

例えば。 .NET 3.5用にコンパイルしますが、後で.NET 2.0にサービスをインストールしても意味がありません。

宛先マシンにサービスをインストールできるので、あなたはすでにadminであると思います。したがって、そのサービスマシンで.NETフレームワークをアップグレードするだけです。

0
BerggreenDK

私も同じ問題を抱えていました。最初、プロジェクトはプロジェクトのデバッグフォルダー内のD:\の非常に長いパスにありました。 。exeサービスファイルを移動したをパスの短い別の場所に移動し、「C:\」で開始すると、問題は解決しました。

このバッチファイルを使用してサービスをインストールする

@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
0

同じ問題があり、上から何もWindows Server 2019で助けていませんでした

互換性テストを実行しようとした後、登録が突然機能しました: enter image description here

0
Kjeld Poulsen

Windowsサービスを含むディレクトリのコマンドプロンプトウィンドウに単にMyService.exe /installと入力してみましたか?それは過去に私のために働いていました。 MyService.exe /uninstallを使用してWindowsサービスをアンインストールすることもできます。

0
Bernard

上記のすべてを試しても同じエラーが発生する場合は、32ビットアプリケーションまたは32ビットDLLがあり、サーバーが64ビットサーバーであるかどうかを再確認してください。

0
Michelle