したがって、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にあるためだと思います。
誰かがこの問題について何か経験がありますか?
誰もこれを手に入れようとはしませんでした!
これが私がしなければならなかったことです:
コードプロジェクト記事 へのリンク:
アプリケーションが.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
これで問題が解決されない場合は、.vdprojファイルの起動条件を調べ、.NETフレームワークを4に変更する必要があります http://www.alexjamesbrown.com/ uncategorized/deploying-net-4-project-error-1001-system-badimageformatexception /
X64マシンでコンパイルする場合は、必ず構成マネージャーに移動して、ビルドをx64に変更してください。もちろん、InstallUtil.exeの正しいバージョンを使用していることを確認する必要があります。幸運。
私にとっては、私がインストールしようとしていたexeファイルを右クリックして「ブロック解除」をクリックしました
私はあなたがあなたの質問に答えを提供すると信じています:
「このアセンブリは、現在ロードされているランタイムよりも新しいランタイムによってビルドされており、ロードできません。」
そのため、新しい関数(新しいフレームワークにある)を使用してランタイムをコンパイルした可能性がありますが、それを登録しているコンピューターはより低いバージョンを実行しています。
例えば。 .NET 3.5用にコンパイルしますが、後で.NET 2.0にサービスをインストールしても意味がありません。
宛先マシンにサービスをインストールできるので、あなたはすでにadminであると思います。したがって、そのサービスマシンで.NETフレームワークをアップグレードするだけです。
私も同じ問題を抱えていました。最初、プロジェクトはプロジェクトのデバッグフォルダー内の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
Windowsサービスを含むディレクトリのコマンドプロンプトウィンドウに単にMyService.exe /install
と入力してみましたか?それは過去に私のために働いていました。 MyService.exe /uninstall
を使用してWindowsサービスをアンインストールすることもできます。
上記のすべてを試しても同じエラーが発生する場合は、32ビットアプリケーションまたは32ビットDLLがあり、サーバーが64ビットサーバーであるかどうかを再確認してください。