web-dev-qa-db-ja.com

C#コンソールアプリケーションの.exe名を取得するにはどうすればよいですか?

VS2008のC#コンソールモードアプリケーションである「xiixtasks.exe」をデバッグしています。

Xiixtasks.exeからバージョン情報を取得しようとしています。

「Process.GetCurrentProcess()」を試してみると、xiixtasks.exeではなく、vshost.exeのファイル名とバージョン情報が表示されます。

  // WRONG: this gives me xiixtasks.vhost.exe, version 9.0.30729.1
  //        I *want* "xiixtasks.exe", version 1.0.0.1024
  System.Diagnostics.FileVersionInfo fi =
    System.Diagnostics.Process.GetCurrentProcess().MainModule.FileVersionInfo;

代わりに何をすべきですか?

前もって感謝します!

================================================== ====

解決:

1)最初の問題は、実際にはIDEの「vshost」ラッパーでした。回避策の1つは、ビルド設定を変更することでした。

2)Assembly.GetExecutingAssembly()。CodeBaseはexcellentソリューションです-ありがとうございます!。デバッガーの内外で機能します。

3)残念ながら、通常のファイルパスを期待する関数(GetExecutingAssembly()のようなURIではなく)で呼び出しようとすると、「Uri形式はサポートされていません」という例外で終了しました。

4)最終的な解決策:GetExecutingAssembly()を呼び出し、次にUri.LocalPath()を呼び出します。

...
else if (cmdArgs.cmd.Equals(CmdOptions.CMD_SHOW_VERSION))
{
    string codeBaseUri = 
       Urifile.System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
    string codeBase =
        new Uri (codeBaseUri).LocalPath;
    string sVersion = Util.GetWindowsVersion(codeBase);
    System.Console.WriteLine ("version({0}): {1}: ",
        Util.Basename(codeBase), sVersion);
}

もう一度ありがとうございました!

21
paulsm4

アセンブリのフルパス:

Assembly.GetExecutingAssembly().CodeBase.Dump();

名前はいつでもPath.GetFileNameで抽出できます。

string codeBase = Assembly.GetExecutingAssembly().CodeBase;
string name = Path.GetFileName(codeBase);
32
as-cii

[Visual Studioホスティングプロセスを有効にする]チェックボックスを有効にして、デバッグ中にIDE内で実行しているようです。この場合、現在のプロセスisxiixtasks.vshost.exe-デバッグを支援するために使用されるシェルexeです。そのチェックボックスを無効にする必要があります。

enter image description here

11
Marc Gravell

必要な情報に応じて、さまざまな通話を使用できます。

enter image description here

4
KreepN

バージョンを取得するには、これを試してください。

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

そしてこれは名前を取得するために:

System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()
3
user596075

'vshost.exe'ラッパーは通常、デバッグビルドに対してのみ有効であり、使用する必要もないため、プロジェクト設定でオフにすることを検討する必要があります([デバッグ]タブで、[VisualStudioホスティングプロセスを有効にする]をオフにします]下部)。

2
Ken Beckett

これはあなたの名前/バージョンも取得します

name: Assembly.GetExecutingAssembly().GetName().Name
version: = Assembly.GetExecutingAssembly().GetName().Version
2
ondrovic

実際にはvshostファイルをデバッグモードで実行しているので、これは実際に私が期待することです。

Vshostファイルを実行するのではなく、exeを直接実行する場合は、プロジェクト設定に移動して、vshostデバッグオプションを無効にする必要があります。

2

次のコードを使用して、あるディレクトリから別のディレクトリにxmlファイルをコピーしているときに、「URI形式はサポートされていません」などの例外が発生する場合。

string path=System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
DirectoryInfo dir=new DirectoryInfo(path+"\\App2");
FileInfo[] Files=dir.GetFiles();

次に、のようにURIに変換します。

string path =Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 
URI uri = new URI(path); 
string FileName = Path.Combine(uri.LocalPath, "\\App2"+file.Name);

次に、それを使用してファイルを取得します。

1
Teja