2017-09-29 8 views
1

.NET CLRでSHIM_NOVERSION_FOUNDエラーを示唆している予期しない "このアプリケーションを起動できません"ポップアップエラーが発生します。どちらも、.NETフレームワーク4.5アプリケーションですvb.net CLR/SHIMエラー:このアプリケーションを起動できませんでした。 - >使用するランタイムのバージョンを見つけることができません

1- MyApp.exe -- Windows Forms App
2- Launcher.exe -- Windows Service

、およびLauncher.exeがMYAPP.EXE内部に埋め込まれている:ここで私は2つのvb.netアプリケーションを持っている

...何が起こっているのです。どちらもAnyCPU用に構成されており、どちらもapp.configファイルを使用していません。その理由は、配信ツールでは1つのファイルしか配信できないため、追加することはできません。実行可能ファイルは自己完結型でなければならず、app.configファイルを埋め込むことはできません。

実行は以下の層で動作します:

レイヤ1:配達ツール

  • Native C++ application
  • Elevated, running as Local System Account

レイヤ2:MYAPP.EXE

  • .NET 4.5 application
  • Elevated, running as Local System Account
  • It runs fine, and installs Launcher.exe as a new Windows Service.

レイヤ3:ランチャー.exe

  • .NET 4.5 Windows Service
  • Elevated, running as Local System Account
  • Uses Windows API calls to enable the following privileges: SE_INCREASE_QUOTA_NAME, SE_ASSIGNPRIMARYTOKEN_NAME, SE_TCB_NAME
  • In summary, it uses elevated privileges to search for Explorer.exe processes, open them, duplicate the user's security token, and call the CreateProcessAsUser() API, using the user's token, in order to launch a second copy of MyApp.exe, running on the user's desktop.

レイヤ4:MYAPP.EXE私は層2,4でMYAPP.EXEのロードを比較するために、.NETのCLRデバッグを有効にした

  • .NET 4.5 application
  • Fails to launch with popup error --> This application could not be started.
  • It's A COPY of MyApp.exe, same as layer 2.

レイヤ2:
6172,1589.119、構成ファイルの解析:C:... \ MyApp.exe.config
6172,1589.119、構成ファイル(開く)。結果:80070002
6172,1589.119、UseLegacyV2RuntimeActivationPolicyが0に設定されている
6172,1589.119、LegacyFunctionCall:GetFileVersionファイル名:C:... \ MyApp.exe
6172,1589.119、LegacyFunctionCall:GetFileVersionファイル名:C:... \ MYAPP.EXE
6172,1589.119、C:ランタイムを決め、v4.0.30319
6172,1589.166:... \ MYAPP.EXEがバージョンで構築されたv4.0.30319

レイヤ4:
6552,1594.704、解析設定ファイル:C:\ WINDOWS \ TEMPの\のMyApp.exe.config
6552,1594.704、設定ファイル(オープン)。結果:80070002
6552,1594.704、UseLegacyV2RuntimeActivationPolicyは0に設定されます。
6552,1594.704、LegacyFunctionCall:GetFileVersionファイル名:C:¥windows¥TEMP¥MyApp.exe


6552,1594.704、エラー:使用するランタイムのバージョンを見つけることができません。
6552,1594.704、SEM_FAILCRITICALERRORSは5
6552,1688.055、FunctionCall:RealDllMainに設定されます。理由:0
6552,1688.055、FunctionCall:OnShimDllMainCalled。理由:0

ランダムな事実:

  • This doesn't happen on all computers targeted.
  • Disabling the antivirus doesn't resolve on affected systems.
  • On some computers, the error only happens once, and subsequent executions do not reproduce the popup error.

を理解する上で任意の助けを探していたり​​、非常に同じアプリケーションが既に正常に起動したときに、.NET CLRは、使用するランタイムのバージョンを確認することができませんWHYデバッグ!

答えて

0

LocalSystemとして実行されているWindowsサービスと、アクティブセッション(WTSQueryUserToken)に関連するユーザートークンを複製してCreateProcessAsUserを使用して実行しようとしていたWPFアプリケーションで同じ問題が発生しました。 .exeを手動で実行すると、機能しましたが、サービスがプロセスを作成しようとしていたときに、「このアプリケーションを開始できませんでした。また、「エラー:使用するランタイムのバージョンを見つけることができません」と同じCLRログが表示されます。

これらは私がやったものです:

  • OnlyUseLatestCLR設定したレジストリ値1には、
  • マップされたドライブの使用UNCパスは(私はいくつかの理由でWindowsのVM内とするためのシステムを実行していない可能性アプリケーションをロードした後に設定ファイルのパスを見つける)

まず、CreateProcessAsUserに渡すパスが正しいかどうかを確認します。

+0

こんにちはキリスト教。あなたの記事のおかげで、私は解決策としてマークしましたが、他にもいくつかの要因がありました。まず、以前はapp.configファイルを使用していましたが、以前はそうではありませんでした。後でレイヤ3でアプリケーションを起動するときに参照するapp.configファイルがあるように、実行時のレイヤ2にapp.configを追加しました。次の問題は、あなたが言いましたが、CreateProcessAsUserに正しい "lpCurrentDirectory"を呼び出すことで、app.configファイルが見つかる可能性があります。あなたの分析とフィードバックをありがとう! – Brian

+0

あなたはそれを解決してうれしいです。 –

関連する問題