2

.NET 4.5に依存するWiXインストーラーを備えたオープンソースのC#アプリがあります。

  • Windows7 64ビット(.NET 4.5がインストールされている)ユーザーは、正常に動作すると言っています。
  • Windows7 32ビット(.NET 4.5がインストールされている)ユーザーは、クラッシュすると言います。

そこで、Windows7 32ビット(VirtualBoxに)をインストールし、アプリをインストールしましたが、実際にクラッシュします。

ここに画像の説明を入力してください

問題の署名09はSystem.IO.DirectoryNotFoundであり、WindowsのイベントビューアはC:\Windows\system32\KERNELBASE.dll、それが手がかりを与えることができるかどうかについて言及しています。

次に、同じマシンにVisual C#2010 Expressをインストールすることにしました。
サプライズ:アプリがクラッシュしなくなりました(インストールされたアプリでも、Visual C#経由で実行された場合でも)

このクラッシュを回避する方法は?
すべてのユーザーにVisualC#のインストールを依頼することはできません...

4

2 に答える 2

1

私はこれを答えというよりは予感と呼んでいますが、それは助けになったようです。私は私のスループロセスを通過します。

アプリが32ビットではなく64ビットで動作するという事実に基づいて、私はすぐに考えBadImageFormatExceptionているか、間違ってコード化されたパスを調べていますProgram Files (x86)(または64ビット/ 32ビットのレジストリ値に似たもの)。しかし、VSがインストールされていれば、すべてが正常であることがわかります。これは奇妙なことです。それで、私はprojファイルとリファレンスを見始めます。ほとんどすべてがマネージコード/MSILであるため、32ビット/64ビットの問題に関連する可能性のあるものではないようです。ただし、参照プロジェクトの1つ(SparkleLib.Cmis)で、System.Data.SQLite管理されていないコンポーネントがあることがわかっている参照が表示されます。ドキュメントをグーグルで検索しました。彼らはこれに言及します:

すべての「静的」パッケージには、適切なバージョンのVisualC++ランタイムに静的にリンクされたネイティブモードまたは混合モードのアセンブリバイナリが含まれています。通常、これらのパッケージは、お客様のマシンに必要なバージョンのVisual C ++ランタイムがインストールされておらず、特権が制限されているためにインストールできない場合に使用されます。

System.Data.SQLiteしたがって、この時点では、VSがすでに存在しているため、開発ボックスで機能するように展開されたものが不適切に展開されていると確信しています。OPは、これが確かに問題であることを確認しました。

于 2012-11-20T04:30:15.927 に答える
1

全ての情報が手元にあるわけではないので、あくまで推測です。しかし、CLR20r3Common Language Runtine 2.0 リビジョン 3であるため、3 つの解決策が考えられます。そのうちのすべては、当社の主力製品の 1 つのリグレッション テスト中に発生しました。

包装

必要なすべての dll をパッケージ化するわけではありませんが (つまり、「ファイルが見つかりません」)、それらは開発環境に同梱されています。Visual Studio で copy-local を true に設定します。

.NET バージョン

クライアントには .Net 2.0 がインストールされていないため、CLR20r3 は失敗します (「ファイルが見つかりません」)。

ターゲット アプリケーション プラットフォーム

一部のサードパーティの dll はすべての構成で機能しないため、実行可能ファイルに「any-cpu」ビットが設定されているかどうかに関係なく機能するかどうかを確認する価値があるかもしれません。(つまり、x86 または x64 向けにビルドし、Visual Studio で「any-cpu」を使用しないでください)。

アップデート

この特定のケースについていくつかグーグルで調べた後、特にP2P5の両方( .NET clr20r3 例外パラメーター P1..P10の解読の好意によるExe ファイル アセンブリ バージョン番号とFaultingアセンブリ) が0.0.0.0であるため、.NET バージョンが問題であると考えています。 . ファイルが見つからないという理由だけでアプリケーションが読み込まれません。この場合は、.NET 4.5 以外の .NET フレームワーク バージョンに属するファイルだと思います。

于 2012-11-19T07:49:50.743 に答える