我正在調試VS2008中的C#控制檯模式應用程序「xiixtasks.exe」。如何獲取C#控制檯應用程序的.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);
}
再次感謝你,所有
我推薦這個。字符串全名= System.Reflection.Assembly.GetExecutingAssembly()。位置; – Lin
您也可以使用ManifestModule的Name屬性:Assembly.GetExecutingAssembly()。ManifestModule.Name – Rafael