VS2008のC#コンソールモードアプリケーションである「xiixtasks.exe」をデバッグしています。
xiixtasks.exeからバージョン情報を取得しようとしています。
「Process.GetCurrentProcess()」を試してみると、xiixtasks.exeではなく、vshost.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」ラッパーでした。回避策の1つは、ビルド設定を変更することでした。
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);
}
もう一度ありがとうございました!