How do I get the .exe name of a C# console application?

paulsm4 picture paulsm4 · Oct 24, 2011 · Viewed 25.8k times · Source

I'm debugging "xiixtasks.exe", a C# console-mode application in VS2008.

I'm trying to get the version info from xiixtasks.exe.

When I try "Process.GetCurrentProcess()", it gives me the filename and version info for vshost.exe, NOT xiixtasks.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;

What should I be doing instead?

Thank you in advance!

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

Solution:

1) The initial problem was indeed the IDE's "vshost" wrapper. One workaround would have been to change the build settings.

2) Assembly.GetExecutingAssembly().CodeBase is an excellent solution - thank you!. It works inside and outside the debugger.

3) Unfortunately, when I tried calling it with a function that expected a normal file path (instead of a URI like GetExecutingAssembly()" gives you), it died with a "Uri formats are not supported" exception.

4) Final solution: call GetExecutingAssembly(), then 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);
}

Thank you once again, all!

Answer

as-cii picture as-cii · Oct 24, 2011

Full Path of your assembly:

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

You can always extract the name with Path.GetFileName:

string codeBase = Assembly.GetExecutingAssembly().CodeBase;
string name = Path.GetFileName(codeBase);