I'm debugging "xiixtasks.exe", a C# console-mode application in VS2008.
I'm trying to get the version info from xiixtasks.exe.
When I try "Process.GetCurrentProcess()", it gives me the filename and version info for vshost.exe, NOT 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;
What should I be doing instead?
Thank you in advance!
======================================================
Solution:
1) The initial problem was indeed the IDE's "vshost" wrapper. One workaround would have been to change the build settings.
2) Assembly.GetExecutingAssembly().CodeBase is an excellent solution - thank you!. It works inside and outside the debugger.
3) Unfortunately, when I tried calling it with a function that expected a normal file path (instead of a URI like GetExecutingAssembly()" gives you), it died with a "Uri formats are not supported" exception.
4) Final solution: call GetExecutingAssembly(), then 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); }
Thank you once again, all!
The /Fe option allows you to specify the output directory, output executable name, or both, for the generated executable file.
Start(String) Starts a process resource by specifying the name of a document or application file and associates the resource with a new Process component. public: static System::Diagnostics::Process ^ Start(System::String ^ fileName); C# Copy.
Exit a Console Application With the Application. Exit() Function in C# The Application. Exit() function terminates all the message loops started with the Application.
Full Path of your assembly:
Assembly.GetExecutingAssembly().CodeBase.Dump();
You can always extract the name with Path.GetFileName
:
string codeBase = Assembly.GetExecutingAssembly().CodeBase; string name = Path.GetFileName(codeBase);
It sounds like you are running inside the IDE in debug with the "Enable the Visual Studio hosting process" checkbox enabled. In which case, the current process is xiixtasks.vshost.exe
- it is a shell exe used to help debugging. You need to disable that checkbox.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With