如何逐步解析命令的路径(例如-gacutil)?

时间:2016-07-01 11:02:59

标签: c# cmd environment-variables gac

我需要以编程方式调用gacutil从GAC卸载一些二进制文件。

为了能够从cmd使用gacutil命令,我必须将gacutil路径添加到PATH变量。但是现在我正在尝试从代码运行gacutil,我需要动态解析gacutil的路径才能启动进程。但我找不到解决gacutil路径的方法。有没有?

我确实尝试扩展PATH环境变量,如this回答中所建议的那样,但由于PATH变量上有多个目录(以分号分隔),因此没有简单的方法来解析gacutil路径。

但显然当我在cmd中键入gacutil时,它会以某种方式解析搜索PATH变量中所有可用目录的路径。我怎样才能从代码中实现这一点?

4 个答案:

答案 0 :(得分:1)

如果在PATH环境变量中指定了path,则无需知道路径:

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

答案 1 :(得分:1)

使用它,使用Process.Start启动它并读取输出:

WHERE gacutil

答案 2 :(得分:1)

当然,如果它在路径中你不需要在@nopeflow回答时进行搜索。但是如果你真的想要获取var q=new function(){ var u,q; q_set_proto(); q=new function Q(){ this.ex=q_exist; this.tf=q_true_false; Object.setPrototypeOf(this.__proto__,null); }; $(document).ready(q_boot); console.warn(q); return q; function q_set_proto(){ Object.defineProperty(Object.prototype,'q',{get:function(){ var slf,slfCon,q,cat,i; slf=this; slfCon=this.constructor; if(slfCon==String || slfCon==Number) slf=slf.valueOf(); q={ get isStr(){return qp_isStr.call(slf)}, get cons(){return qp_constructor.call(slf)}, }; if(slfCon==String){ cat={ get trm(){return qp_string_trim.call(slf)}, has : function(a,b){return qp_string_has.call(slf,a,b)}, }; }; if(cat) for(i in cat) Object.defineProperty(q,i, Object.getOwnPropertyDescriptor(cat,i) ); return q; }}); }; function qp_isStr(){ return this.q.cons==String; }; function qp_constructor(){ return this.constructor; }; function qp_string_trim(){ return this.q.trm; }; function qp_string_has(px,py){ if(!q.ex(px) || !px.q.isStr && !px.q.isAry) return null; if(q.ex(py)) if(!py.q.isNum || py!=0 && py!=1) return null; var len,c,i; if(px.q.isStr){ if(!px.q.trm) return null; return this.q.dex(px)>=0; }; len=px.q.len; if(!len) return null; c=0; for(i in px){ if(!px[i].q.isStr || !px[i].q.trm) return null; c+=q.tf(this.q.dex(px[i])>=0); }; if(!q.ex(py)) return c==len; if(!py) return c==0; return c>0; /****************************** s = offer coffee only on monday s.q.has('on') s.q.has(['on','off']) - all s.q.has(['one','two'],0) - none s.q.has(['one','off'],1) - any /******************************/ }; function q_boot(){ s='offer coffee only on monday'; console.debug(s); }; function q_exist(tgt){ return (tgt!==null && tgt!==u); }; function q_true_false(con,t,f){ if(!q.ex(t)){ t=1;f=0; }; return (con) ? t:f; }; }; 环境变量中任何文件的路径,你可以这样做:

PATH

答案 3 :(得分:1)

如果要查找PATH中的所有可执行文件,以下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%