如何获取C#控制台应用程序的.exe名称?
我正在调试VS2008中的C#控制台模式应用程序“xiixtasks.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格式”exception。
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); }
全部再次感谢你!
assembly的完整路径:
Assembly.GetExecutingAssembly().CodeBase.Dump();
您始终可以使用Path.GetFileName
提取名称:
string codeBase = Assembly.GetExecutingAssembly().CodeBase; string name = Path.GetFileName(codeBase);
听起来您正在调试IDE中运行,并启用了“启用Visual Studio托管过程”复选框。 在这种情况下,当前进程是 xiixtasks.vshost.exe
– 它是一个用于帮助调试的shell exe。 您需要禁用该复选框。
根据您想要的信息,您可以使用各种电话:
试试这个来获得版本:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version
这就是这个名字:
System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()
这实际上是我所期望的,因为它实际上是在调试模式下执行vshost文件。
如果您不希望它直接执行vshost文件而是执行exe,则需要进入项目设置并禁用vshost调试选项。
‘vshost.exe’包装器通常只对Debug版本启用,也没有必要使用它,所以也许您应该考虑在项目设置下关闭它(Debug选项卡,取消选中’启用Visual Studio托管进程’在底部)。
尝试
var asm = Assembly.GetExecutingAssembly();
如果您将获得类似“不支持URI格式”的exception,则使用以下代码将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);
然后用它来获取文件。
这也会得到你的名字/版本
name: Assembly.GetExecutingAssembly().GetName().Name version: = Assembly.GetExecutingAssembly().GetName().Version