如何获取C#控制台应用程序的.exe名称?

如何获取C#控制台应用程序的.exe名称?,c#,fileversioninfo,C#,Fileversioninfo,我正在调试“xiixtasks.exe”,这是VS2008中的一个C#控制台模式应用程序 我正在尝试从xiixstasks.exe获取版本信息 当我尝试“Process.GetCurrentProcess()”时,它会为我提供vshost.exe的文件名和版本信息,而不是xiixstasks.exe: // WRONG: this gives me xiixtasks.vhost.exe, version 9.0.30729.1 // I *want* "xiixtasks

我正在调试“xiixtasks.exe”,这是VS2008中的一个C#控制台模式应用程序

我正在尝试从xiixstasks.exe获取版本信息

当我尝试“Process.GetCurrentProcess()”时,它会为我提供vshost.exe的文件名和版本信息,而不是xiixstasks.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.getExecutionGassembly().CodeBase是一个很好的解决方案-谢谢!。 它在调试器内部和外部工作

3) 不幸的是,当我尝试用一个期望正常文件路径(而不是像getExecutionGassembly()这样的URI)的函数调用它时,它因“URI格式不受支持”异常而失效

4) 最终解决方案:调用getExecutionGassembly(),然后调用Uri.LocalPath():


再次感谢大家!

请尝试以下内容以获取版本:

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version
要获得名称,请执行以下操作:

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

程序集的完整路径:

Assembly.GetExecutingAssembly().CodeBase.Dump();
您始终可以使用
Path.GetFileName
提取名称:

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

听起来您在IDE内部运行调试时启用了“启用Visual Studio宿主进程”复选框。在这种情况下,当前进程
xiixtasks.vshost.exe
-它是用于帮助调试的shell exe。您需要禁用该复选框


这正是我所期望的,因为它实际上是在调试模式下执行vshost文件

如果不希望它直接执行vshost文件,而希望它直接执行exe,则需要进入项目设置并禁用vshost调试选项。

试试看


<> >代码> ValsAs= Cudio.GETExcutuCuffe();

< P> >“VHOSTO.exe”包装器通常仅用于调试生成,并且也不必使用它,所以也许您应该考虑在项目设置下关闭它(Debug标签,取消检查)启用VisualStudio宿主进程“底部”.

根据您需要的信息,您可以使用各种电话:


如果在使用以下代码将xml文件从一个目录复制到另一个目录时出现“URI格式不受支持”之类的异常

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

确切地说,如果您在IDE之外运行应用程序,它应该返回xiixtasks.exe.address-如果我调用.getExecutionGassembly().CodeBase而不是Process.GetCurrentProcess().main模块,那么无论调试设置如何,它都可以在IDE内部和外部工作。主要是:string exeName=Assembly.getExecutionGassembly().ManifestModule.ToString();我建议使用.string fullname=System.Reflection.Assembly.GetExecutionGassembly().Location;您还可以使用ManifestModule的Name属性:Assembly.GetExecutionGassembly().ManifestModule.Name
name: Assembly.GetExecutingAssembly().GetName().Name
version: = Assembly.GetExecutingAssembly().GetName().Version