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

pau*_*sm4 20 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;
Run Code Online (Sandbox Code Playgroud)

我应该做什么呢?

先感谢您!

================================================== ====

解:

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);
}
Run Code Online (Sandbox Code Playgroud)

全部再次感谢你!

as-*_*cii 31

装配的完整路径:

Assembly.GetExecutingAssembly().CodeBase.Dump();
Run Code Online (Sandbox Code Playgroud)

您始终可以使用以下命令提取名称Path.GetFileName:

string codeBase = Assembly.GetExecutingAssembly().CodeBase;
string name = Path.GetFileName(codeBase);
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 11

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

在此输入图像描述

  • 确切地说,如果您在IDE之外运行应用程序,它应该返回xiixtasks.exe. (2认同)

ond*_*vic 5

这也会得到你的名字/版本

name: Assembly.GetExecutingAssembly().GetName().Name
version: = Assembly.GetExecutingAssembly().GetName().Version
Run Code Online (Sandbox Code Playgroud)