2016-07-01 5 views
2

GACからいくつかのバイナリをアンインストールするために、慣習的にgacutilを呼び出す必要があります。コマンドのパス(例:-gacutil)をプログレッシブに解決するにはどうすればよいですか?

cmdからgacutilコマンドを使用できるようにするには、gacutilパスをPATH変数に追加する必要がありました。しかし、コードからgacutilを実行しようとしているので、プロセスを開始できるようにgacutilのパスを動的に解決する必要があります。しかし、私はgacutilの経路をまだ解決する方法を見つけることができませんでした。何かありますか?

this答えに示唆されているようなPATH環境変数を拡張しようとしましたが、PATH変数に複数のディレクトリ(セミコロンで区切られています)があるため、gacutilパスを解決する簡単な方法はありません。

しかし明らかに私はcmdでgacutilと入力すると、何とかPATH変数の利用可能なすべてのディレクトリを検索してパスを解決します。コードからそれをどうやって作ることができますか?

答えて

1

パスがPATH環境変数で指定されている場合は、パスを知っている必要はありません。

Process p = new Process(); 
p.StartInfo.FileName = "gacutil"; 
p.Start();  
//it automatically resolves path basin on PATH environment variable 

。これを使用する

+0

私はそれが必要とされていないstandardoutputs –

+0

をリダイレクトする必要があるので、私は、本当のあるUseShellExecute =を使用することはできません。 – pwas

+0

ありがとう!私はException- "システムが指定されたファイルを見つけることができませんでした。" VSを再起動すると問題が解決しました:) –

1

、Process.Startを使用して、それを起動し、出力を読み:もちろん

WHERE gacutil 
1

、それはパスにかどう@nopeflowは答えとしてあなたはそれを検索する必要はありません。しかし、あなたが本当にPATH環境変数に任意のファイルのパスを取得したい場合、あなたはこのような何か行うことができます:あなたがPATHに実行ファイルをすべて検索したい場合は、以下の

string[] PathDirs = Environment.GetEnvironmentVariable("PATH").Split(';'); 
string GACdir=""; 
foreach (string path in PathDirs) 
{ 
    if (File.Exists(Path.Combine(path,"gacutil.exe"))) 
    { 
      GACdir=path; 
    } 
} 
1

cmd.exeスクリプトますそれらを特定する。

@SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION 
@SET EXITCODE=1 

:: Needs an argument. 

@IF "x%1"=="x" (
    @ECHO Usage: %0 ^<progName^> 
    GOTO TheEnd 
) 

@set newline=^ 


@REM Previous two (2) blank lines are required. Do not change! 

@REM Ensure that the current working directory is first 
@REM because that is where DOS looks first. 
@PATH=.;!PATH! 

@FOR /F "tokens=*" %%i in ("%PATH:;=!newline!%") DO @(
    @IF EXIST %%i\%1 (
     @ECHO %%i\%1 
     @SET EXITCODE=0 
    ) 

    @FOR /F "tokens=*" %%x in ("%PATHEXT:;=!newline!%") DO @(
     @IF EXIST %%i\%1%%x (
      @ECHO %%i\%1%%x 
      @SET EXITCODE=0 
     ) 
    ) 
) 

:TheEnd 
@EXIT /B %EXITCODE% 
関連する問題