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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (56)

我正在调试VS 2008中的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”包装器。一个解决办法是更改构建设置。

3)不幸的是,当我尝试用一个函数调用它时,它会出现“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);
}

再次感谢大家!

提问于
用户回答回答于

程序集的完整路径:

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

你总是可以将名称提取为Path.GetFileName:

string codeBase = Assembly.GetExecutingAssembly().CodeBase;
string name = Path.GetFileName(codeBase);
用户回答回答于

这听起来像是你在IDE中运行,在启用“启用Visual Studio宿主进程”复选框的情况下进行调试。在这种情况下,当前进程 xiixtasks.vshost.exe - 它是一个shell exe文件,用于帮助调试。你需要禁用该复选框。

扫码关注云+社区

领取腾讯云代金券