0

次のコード [C#] を使用すると、googlechrome がインストールされているパスを知ることができます。ただし、このコードは最初に chrome.exe を起動してから、そのパスを取得します。私の質問は、chrome.exe を起動せずに、どうすればパスを知ることができますか?

        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = "chrome.exe";
        string argmnt = @"-g";
        startInfo.Arguments = argmnt;

        String path = null;
        try
        {
            Process p = Process.Start(startInfo);
            path = p.MainModule.FileName;
            p.Kill();
        }
        catch (Exception e)
        {
            return String.Empty;
        }
4

3 に答える 3

0

WHEREコマンドを引数として使用chrome.exeします。これにより、シェルによってロードされる実行可能ファイルへのパスがわかります。

コマンドからの出力を読み返すだけです。

これは、現在のバージョンと同様に、実行可能ファイルがシステム PATH にあることを前提としています。

ニーズに合わせて調整できるコードを次に示します。これは本質的に WHERE コマンドをラップします (ちなみにこれは実行可能ファイルであるため、WHERE WHEREそのパスが明らかになります)。

using System;
using System.Diagnostics;

public sealed class WhereWrapper
{
    private static string _exePath = null;

    public static int Main(string[] args) {

        int exitCode;
        string exeToFind = args.Length > 0 ? args[0] : "WHERE";

        Process whereCommand = new Process();

        whereCommand.OutputDataReceived += Where_OutputDataReceived;

        whereCommand.StartInfo.FileName = "WHERE";
        whereCommand.StartInfo.Arguments = exeToFind;
        whereCommand.StartInfo.UseShellExecute = false;
        whereCommand.StartInfo.CreateNoWindow = true;
        whereCommand.StartInfo.RedirectStandardOutput = true;
        whereCommand.StartInfo.RedirectStandardError = true;

        try  {
            whereCommand.Start();
            whereCommand.BeginOutputReadLine();
            whereCommand.BeginErrorReadLine();
            whereCommand.WaitForExit();
            exitCode = whereCommand.ExitCode;

        } catch (Exception ex) {
            exitCode = 1;
            Console.WriteLine(ex.Message);

        } finally {
            whereCommand.Close();
        }

        Console.WriteLine("The path to {0} is {1}", exeToFind, _exePath ?? "{not found}");

        return exitCode;
    }

    private static void Where_OutputDataReceived(object sender, DataReceivedEventArgs args) {

        if (args.Data != null) {
            _exePath = args.Data;
        }
    }
}
于 2012-04-15T05:34:55.693 に答える
0

PATH 環境変数を解析し、その exe を探しているすべてのディレクトリを列挙します。これは基本的に、p.Start メソッドを呼び出したときに OS が行うことです。

于 2012-04-15T04:02:46.480 に答える
0

まず、Microsoft から「Process Monitor」というツールをダウンロードします。ProcessMonitor は Microsoft SysInternals から入手できます。次に、Chrome を起動してその場所を見つけます。

ヒント: 「プロセス モニター」は、ハードディスク ドライブ、レジストリ、およびスレッド/プロセスの情報をリアルタイムで監視し、キャプチャしたトレースを保存することができます。

ここに画像の説明を入力

を。Process Monitor を開くと、情報のトレースが開始されます。

b. 虫めがねツールバー ボタン (オン/オフ トレース ボタン) をクリックして、トレースを停止します。

c. 次に、[Clear trace] ボタンをクリックしてトレースをクリアします。

d. Chrome を起動し、開いたら Chrome.exe を検索すると、ファイル パスが表示されます。

于 2012-04-15T05:26:08.487 に答える