2

大学の課題のために MonoDevelop で C# GTK# アプリケーションを作成しましたが、GTK# または Mono ライブラリをインストールする管理者権限がないため、大学のコンピューターでは実行されないことがわかりました。いくつかの調査の後、Cygwin で mkbundle を使用して、必要な DLL を実行可能ファイルにバンドルする手法を発見しました。私はこれらの指示に従いました:

http://www.joebest.org/2011/09/mono-and-mkbundle-on-windows.html

自宅にいる間は大学のコンピューターでテストできないため、Win 7 Pro 64 ビットを完全にクリーン インストールした仮想マシンでテストしています。私の開発用マシンは同じ OS を実行していますが、開発用マシンには必要なすべてのライブラリが既にあり、エラーも発生していないため、開発用マシンでテストしても意味がありません。

バンドルされた実行可能ファイルを問題なく作成できます。面倒なことはありません。バンドルされた実行可能ファイルは、私の開発マシンで問題なく動作します。Win 7 のクリーン インストールで実行しようとしても、何も起こりません。ウィンドウは表示されません。エラー メッセージはありません。なし。実行可能ファイルをダブルクリックすると、その名前がタスク マネージャーの [プロセス] タブに一瞬表示されるので、実行中であることだけはわかります。

比較のために、バンドルされていないアプリケーションを実行しようとすると、.NET 4 ランタイムをインストールする必要があるというエラー メッセージが表示されます。.NET 4 ランタイムをインストールすると (大学のコンピューターには .NET 4 がインストールされていることがわかっています)、アプリケーションは次のエラーでクラッシュします。

Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01:   keycommandeditor.exe
Problem Signature 02:   1.0.4560.18753
Problem Signature 03:   4fe8f352
Problem Signature 04:   glib-sharp
Problem Signature 05:   2.12.0.0
Problem Signature 06:   4e383483
Problem Signature 07:   2bc
Problem Signature 08:   0
Problem Signature 09:   System.DllNotFoundException
OS Version: 6.1.7600.2.0.0.256.48
Locale ID:  1033
Additional Information 1:   0bff
Additional Information 2:   0bff8d176610735333c3986b545525d3
Additional Information 3:   9af1
Additional Information 4:   9af19ba95df508dd9c076f2be86ba847

mkbundle の出力に表示されたすべての DLL をアプリケーションのフォルダーに追加しました。フォルダーから glib-sharp.dll を削除すると、エラーは次のようになります。

Problem signature:
Problem Event Name: APPCRASH
Application Name:   KeyCommandEditor.exe
Application Version:    1.0.4560.18753
Application Timestamp:  4fe8f352
Fault Module Name:  KERNELBASE.dll
Fault Module Version:   6.1.7600.16385
Fault Module Timestamp: 4a5bdbdf
Exception Code: e0434352
Exception Offset:   0000b727
OS Version: 6.1.7600.2.0.0.256.48
Locale ID:  1033
Additional Information 1:   0a9e
Additional Information 2:   0a9e372d3b4ad19135b953a78882e789
Additional Information 3:   0a9e
Additional Information 4:   0a9e372d3b4ad19135b953a78882e789

また、CorFlags.exe を使用して 32BIT フラグを変更しようとしましたが、何の効果もないようです。

私はこれに完全に困惑しているので、誰かが次に試すことを知っているかどうか疑問に思っています.

4

1 に答える 1

0

その音によって、同じタスクを実行するものを使用したいと思いmkbundle2ますが、Mono 2.x ランタイム用です。ランタイムの依存関係 (つまり、LoadLibrary などの関数を呼び出すコード) も mkbundle によって検出されない可能性があるため、注意が必要です。

于 2014-03-26T22:49:31.310 に答える