Я отлаживаю "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);
}
Еще раз спасибо всем!