ユーニックス総合研究所

  • home
  • archives
  • dotnet6-app-can-not-use

.NET 6アプリで「このアプリはお使いのPCでは実行できません」というエラーが出る

  • 作成日: 2023-09-11
  • 更新日: 2023-12-24
  • カテゴリ: C#

.NET 6アプリでエラーが出る

環境:

  • .NET 6
  • Visual Studio 2022 Community
  • C#
  • 開発PC: Windows10 x64
  • サブPC: Windows10 x64

開発PCで.NET 6のアプリを作成した。
そしてそれを自己完結型のビルドモードでビルドし、動作テストをしていた。
開発PCでexeファイルの実行で動作したが、サブPCにexeファイルなどをコピーして、サブPC上で実行すると「このアプリはお使いのPCでは実行できません」というエラーが出る。
サブPCもWindows10 x64なので原因は不明。

ビルドモードを自己完結型からフレームワーク依存(つまり環境の.NET 6依存)に変更した。
そしてサブPCで実行すると起動しない。Windowsのイベントログを見ると「Failed to create CoreCLR, HRESULT: 0x0000000」というようなエラーが出ていた。
サブPCの.NETを確認するとバージョンが1だったので、これを6に上げた。アプリの依存フレームワークが.NET 6だから。
そうしてサブPCを再起動して再度フレームワーク依存のexeファイルを実行するとエラーは出ず、アプリが起動した。

自己完結型はサブPC環境の.NETは関係ないと思ったが一応環境の.NETを6にしてみてから自己完結型を実行してみた。しかしやはり同様の「このアプリはお使いのPCでは実行できません」というメッセージが出た。

これらの事象から、どうも自己完結型でビルドすると実行できない場合があるらしいということがわかった。
自己完結型でビルドしたいので原因の調査を進めることにする。

ファイルのコピーに失敗していた?

開発PCからサブPCにexeファイルをコピーするときに、USBメモリを使ってコピーしていた。
開発PCにUSBメモリを差し、ファイルをコピーし、USBメモリを抜いてサブPCに差し、サブPCにファイルをコピーする。
という感じ。

それで、この一連のコピーに失敗しているのではないかと思い、共有フォルダを使ってサブPCに直接ファイルをコピーしてみた。
そしてその実行ファイルをサブPCで実行するとちゃんと起動した。

これだけ見るとどうやら実行ファイルのコピーに失敗しているように見える。
おそらくUSBメモリでやり取りするときにコピーの失敗が生じ、それによってサブPCにコピーされた実行ファイルが破損していて、メッセージが表示されたのだろう。