我正在调试VS2008中的C#控制台模式应用程序“xiixtasks.exe”。如何获取C#控制台应用程序的.exe名称?
我试图从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格式”的异常为例
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);
}
再次感谢你,所有
我推荐这个。字符串全名= System.Reflection.Assembly.GetExecutingAssembly()。位置; – Lin
您也可以使用ManifestModule的Name属性:Assembly.GetExecutingAssembly()。ManifestModule.Name – Rafael