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

时间:2011-10-24 19:51:44

标签: c# fileversioninfo

我正在调试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格式”异常。

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);
}

再次感谢你们!

9 个答案:

答案 0 :(得分:31)

装配的完整路径:

Assembly.GetExecutingAssembly().CodeBase.Dump();

您始终可以使用Path.GetFileName

提取名称
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
string name = Path.GetFileName(codeBase);

答案 1 :(得分:11)

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

enter image description here

答案 2 :(得分:4)

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

enter image description here

答案 3 :(得分:3)

试试这个版本:

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

这就是这个名字:

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

'vshost.exe'包装器通常只对Debug版本启用,也没有必要使用它,所以也许您应该考虑在项目设置下关闭它(Debug选项卡,取消选中'启用Visual Studio托管流程'在底部)。

答案 6 :(得分:2)

这也可以为您命名/版本

name: Assembly.GetExecutingAssembly().GetName().Name
version: = Assembly.GetExecutingAssembly().GetName().Version

答案 7 :(得分:1)

尝试

var asm = Assembly.GetExecutingAssembly();

答案 8 :(得分:1)

如果您将获得类似“不支持URI格式”的异常,请使用以下代码将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);

然后用它来获取文件。