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