我需要以编程方式调用gacutil从GAC卸载一些二进制文件。
为了能够从cmd使用gacutil命令,我必须将gacutil路径添加到PATH变量。但是现在我正在尝试从代码运行gacutil,我需要动态解析gacutil的路径才能启动进程。但我找不到解决gacutil路径的方法。有没有?
我确实尝试扩展PATH环境变量,如this回答中所建议的那样,但由于PATH变量上有多个目录(以分号分隔),因此没有简单的方法来解析gacutil路径。
但显然当我在cmd中键入gacutil时,它会以某种方式解析搜索PATH变量中所有可用目录的路径。我怎样才能从代码中实现这一点?
答案 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%