我正在调试"xiixtasks.exe",这是一个用VS2008编写的C#控制台模式应用程序。
我正在尝试从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)不幸的是,当我尝试用一个期望正常文件路径的函数(而不是像GetExecutingAssembly()“提供的URI”那样的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);
}
再次感谢大家!
https://stackoverflow.com/questions/7881148
复制相似问题