Как мне получить имя .exe консольного приложения C #?

Я отлаживаю "xiixtasks.exe", приложение C # консольного режима в VS2008.

Я пытаюсь получить информацию о версии из xiixtasks.exe.

Когда я пробую "Process.GetCurrentProcess ()", он дает мне имя файла и информацию о версии для vshost.exe, а НЕ 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;

Что мне делать вместо этого?

Заранее спасибо!

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

Решение:

1) Первоначальной проблемой действительно была оболочка "vshost" среды IDE. Одним из способов решения проблемы было бы изменение настроек сборки.

2) Assembly.GetExecutingAssembly (). CodeBase - это отличное решение - спасибо! Оно работает внутри и вне отладчика.

3) К сожалению, когда я попытался вызвать его с помощью функции, которая ожидала нормального пути к файлу (вместо URI, такого как GetExecutingAssembly () "), он умер с исключением" Форматы 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);
}

Еще раз спасибо, всем!

20
задан paulsm4 24 October 2011 в 22:57
поделиться