2013-02-12 17 views
16

私のアプリケーションにはexeがあり、いくつかのDLLが使用されています。私はC#ですべてを書いています。C#Compact Frameworkでexeアプリケーションの名前とバージョンを取得する方法

私は、exeファイルのバージョン情報からアプリケーション名とバージョンを取得する方法を書いておきたいと思います。

私は完全な.NETではGetEntryAssemblyを使用することができますが、CFでは使用できないことを理解しています。

+0

'System.Diagnostics.Process.GetCurrentProcess()。MainModule.ModuleName'を試しましたか?それはあなたの質問に遭遇したときに** **私が探していたものでした。 – Bitterblue

+0

@ mini-me覚えておくのは古すぎる – cja

答えて

43

アプリ名を取得するようなのWin32 APIを試すことができます。これが役立つことを願っていますGetCallingAssembly()を使用するか、DLLがEXEバージョンを取得しようとしていて、すぐにアクセスできない場合は、タイプ別にアセンブリを取得してください(例:typeof(Program).Assembly)。

EDIT

あなたはDLLを持っていて、実行ファイルの名前が必要な場合は、ユースケースに応じて、いくつかのオプションがあります。アセンブリはEXEアセンブリに含まれる型から取得できますが、DLLがEXEを参照することはまれであるため、その型のオブジェクトにEXEパスが必要です。

Version GetAssemblyVersionFromObjectType(object o) 
{ 
    o.GetType().Assembly.GetName().Version; 
} 

またの少しを行うことができ、エンド実行し、次のように:

[DllImport("coredll.dll", SetLastError = true)] 
private static extern int GetModuleFileName(IntPtr hModule, StringBuilder lpFilename, int nSize); 

... 

var name = new StringBuilder(1024); 
GetModuleFileName(IntPtr.Zero, name, 1024); 
var version = Assembly.LoadFrom(name.ToString()).GetName().Version; 
+0

あなたは確かです、これはコンパクトなフレームワークで動作しますか? –

+0

GetExecutingAssembly()は、呼び出されたDLLの名前を取得します。私はexeの名前が欲しい。 – cja

+0

GetCallingAssembly()はより複雑であり、予期しない結果を招く可能性があります。 – cja

-2

FileInfoクラスFileVersionInfoをお試しいただけますか?

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; 

はあなたが必要になることがあります。バージョンを取得

System.Reflection.Assembly.GetExecutingAssembly().GetName().Name; 

あなたはまたGetModuleFile()

+1

サンプルコードを追加してください – cja

+0

サンプルについてはmsdnを確認してください。 –

+5

私たちの一人は、StackOverflowがどのように動作するのか理解していません – cja

2

あなたはコンポーネント(.dllファイル)を作成し、メインをフェッチするために、別のアプリの参照に使用したい場合

メインアプリ名の取得:バージョンを取得

AppDomain.CurrentDomain.DomainManager.EntryAssembly.GetName().Name; 

をアプリ名とバージョンは、あなたがこの方法を使用することができます。ホスト上とIF依存していること、この、

AppDomain.CurrentDomain.DomainManager.EntryAssembly.FullName; 

しかし、この解決策で問題がある:フルネーム(:アプリ名、アプリのバージョン、文化、なPublicKeyTokenが含まれている)の取得

AppDomain.CurrentDomain.DomainManager.EntryAssembly.GetName().Version.ToString();  

実行ファイルから直接実行されると、エラーが発生します。 したがって、次の選挙:

メインアプリ名を取得:

string appName = AppDomain.CurrentDomain.FriendlyName; 
appName = appName.Substring(0, appName.IndexOf('.')); 

バージョン行き方:

System.Windows.Forms.Application.ProductVersion; 
14

System.Reflection.Assembly.GetEntryAssembly().GetName().Version;

この機能は他のライブラリからのアプリケーションのバージョンを提供します読み込まれます。

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

これは、現在のライブラリのバージョンを提供します。アプリケーションライブラリでこれを呼び出すと、アプリケーションのバージョンが取得され、これをDLLで呼び出すと、そのDLLのバージョンが取得されます。

私の意見ではSystem.Reflection.Assembly.GetEntryAssembly().GetName().Version; は使用する機能がありません。

関連する問題