2009-02-27 23 views
9

私は最近、if you can detect from the application if .NET is installedに尋ねました(アプリケーションが一般的な例外エラーでクラッシュしないように)。.NETがインストールされていない場合、正常に失敗する方法

回答は普通の「いいえ」と思われます。私はまだ.NETがインストールされていない場合、正常に終了することができるようにしたい、これを行う方法はありますか?

実行可能ファイルの名前を変更したくないことに注意してください。つまり、アンマネージの実行可能ファイルと実際の.NETプログラムを実行しているが実行可能ファイルを必要としていないDLLがあることを意味します。

編集:私はインストーラに失敗しているわけではありません。インストーラはまったくなく、実行可能ファイルだけです。もちろん、これが起こる可能性は非常に低いですが、とにかくそれをチェックできるようにしたいと思います。

+4

なぜインストーラーを使用しないのですか?その後、この問題は解消されます。 –

答えて

3

次の2つの異なるオプションがあります。

  • は、実行時にチェックとランタイムがインストールされている場合、あなたのソフトウェアを実行する小さなネイティブコードローダーを書きます。それ以外の場合は、単になど、ランタイムのダウンロード場所に彼を指して、ユーザーにエラーメッセージを与えることができる

OR

  • あなたのインストーラは、ランタイムをインストールしていることを確認してください。 Joe Coehorn氏は、MSIをthis postとするのは簡単だと言いました。InnoSetupなどの他のインストーラーでもそれを実行できるはずです。もちろん、誰かがあなたのソフトウェアを最初にインストールしてから、ウィンドウを再インストールしてから、再インストールせずにアプリケーションを実行しようとすると、クラッシュします。

もちろん、あなたは両方の世界の最高のために両方を組み合わせることができます。

-2

メッセージボックスはインストールされておらず、ダウンロードすることができます。とにかくこれを行うためのほとんどのインストーラがあります。

+0

ええ、どうすればいいですか?最初に.NETフレームワークなしで行うことはできますか? –

+1

VS200 *を使用してインストーラを作成すると、それが自動的に実行されます。 –

0

.Netの存在を確認するネイティブアプリケーションを作成できます。次に、LoadLibraryを使用して管理されたdllをロードし、その内部にGetProcAddressという関数を呼び出して、.NETアプリケーションを起動する必要があります。

あなたはまた、主な機能を非管理コードから表示して呼び出し可能にするために.Net dllを混乱させる必要があります。逆PInvokeと呼ばれます。あなたは何ができるか

http://www.autohotkey.com/forum/topic20273.html

0

Win32ネイティブC/C++であなたの.NET検出コードを書いている、それはいくつかのユーザーフレンドリーエラーメッセージを表示したり、優雅に落下によって意味何や.NETを呼び出して、検出を行います適切なフレームワークが利用可能であれば、dll。 2つの実行可能ファイルを必要としない場合は、dllのバイトをネイティブの実行可能ファイルに格納し、動的にロードします。

このアプローチでは、Monoでアプリケーションを実行することは完全に不可能になります。

+0

Monoでアプリケーションを実行できないのはなぜですか?他のプラットフォームやMono用のネイティブコードローダーを書くことができませんでしたか? –

+0

ああ、よく彼は私が推測できる... –

関連する問題