Подтвердить что ты не робот

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

Я отлаживаю "xiixtasks.exe", приложение консольного режима на С# в 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) Первоначальная проблема была действительно оболочкой IDE "vshost".  Одним из способов было бы изменить настройки сборки.

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);
}

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

4b9b3361

Ответ 1

Полный путь сборки:

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

Вы всегда можете извлечь имя с помощью Path.GetFileName:

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

Ответ 2

Похоже, вы работаете в среде IDE при отладке с включенным флажком "Включить хостинг Visual Studio". В этом случае текущий процесс xiixtasks.vshost.exe - это оболочка exe, используемая для помощи в отладке. Вы должны отключить этот флажок.

enter image description here

Ответ 3

В зависимости от того, какую информацию вы хотите, вы можете использовать различные вызовы:

enter image description here

Ответ 4

Попробуйте это, чтобы получить версию:

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

И чтобы получить имя:

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

Ответ 5

Это на самом деле то, что я ожидаю, поскольку он фактически выполняет файл vshost в режиме отладки.

Если вы не хотите, чтобы он исполнял файл vshost, а скорее ваш exe напрямую, вам нужно зайти в настройки вашего проекта и отключить опцию отладки vshost.

Ответ 6

Обертка 'vshost.exe', как правило, включена только для сборников Debug, и ее также не нужно использовать, поэтому, возможно, вам стоит просто рассмотреть возможность ее отключения в соответствии с вашими настройками проекта (вкладка "Отладка", снимите флажок "Включить Visual Studio" хостинг "внизу.

Ответ 7

попробуйте

var asm = Assembly.GetExecutingAssembly();

Ответ 8

Если вы получите исключение, например, "Формат URI не поддерживается" При копировании xml файла из одного каталога в другой с помощью следующего кода.

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);

затем используйте его для получения файлов.

Ответ 9

Это также даст вам имя/версию

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