サービス (ロードされたランタイムよりも新しいランタイム) をインストールできないのはなぜですか?
-
26-09-2019 - |
質問
そこで、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 用に書かれており、動作するものは .NET 3.5 であることが原因のような気がします。
この問題について経験のある人はいますか?
解決 2
誰もこれを手に入れるところまで来ませんでした!
私がしなければならなかったのは次のとおりです。
- Visual Studio でサービス プロジェクトを右クリックし、[プロパティ] に移動します。
- 「スタートアップ オブジェクト」をサービスの名前に設定します (値「(Not Set)」に設定されていました)。
- 保存。
- 建てる
- 再度インストールしてみてください。
- それは動作します!わーい!みんなで家に帰れるよ!
へのリンク コードプロジェクトの記事 それは役に立ちました:
他のヒント
あなたは間違っinstallutil.exeを使用しています。 4.0フォルダ内のinstallutil.exeを使用します。
C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ installutil.exe の
これで問題が解決しない場合は、.vdproj ファイルの起動条件を調べて、.NET Framework を 4 に変更する必要があります。 http://www.alexjamesbrown.com/uncategorized/deploying-net-4-project-error-1001-system-badimageformatException/
は、x64のマシン上でコンパイルする場合、コンフィギュレーションモンシニョールに入るとx64にビルドを変更してください。もちろん、あなたはあなたがInstallUtil.exeの正しいバージョンを使用していることを確認したいと思います。 g'luckます。
私にとっては、私はちょうど右の私がインストールしようとしていたexeファイルをクリックし、
「ブロックを解除する」をクリック私は、あなたの質問に答えを提供信じるます:
「このアセンブリ、現在ロードされ、実行時よりも新しくしてロードすることはできませんランタイムによって構築されています..」
あなたは(新しいフレームワークである)の新しい機能で、実行時にコンパイルされている場合がありますが、あなたが上でそれをregistratingているコンピュータが低いバージョンを実行しているので。
例:。 .NET 3.5用にコンパイルが、.NET 2.0 wouldntのメイク感覚で、その後のサービスをインストールします。
あなたが宛先マシン上のサービスをインストールすることができますので、は、私はあなたがすでに管理されていると思います。だから、そのサービス・マシン上の.NET Frameworkをアップグレードします。
あなたは単にあなたのWindowsサービスを含むディレクトリでコマンドプロンプトウィンドウでMyService.exe /install
を入力してみましたか?それは、過去に私のために働いています。あなたがすることもできMyService.exe /uninstall
を使用して、Windowsサービスのアンインストールます。
私も同じ問題を抱えていました。当初、私のプロジェクトは、プロジェクトのデバッグフォルダー内の 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
あなたはすべての上に、あなたは、32ビットアプリケーションまたは32ビットDLLを持っているし、あなたのサーバが64ビットサーバーであれば、まだ同じエラー、ダブルチェックを参照しようとした場合。