Jint는 ActiveXObject
이 무엇인지 모르기 때문에 Jint에게 알려야합니다. 당신은 자바 스크립트 생성자로 취급 할 수있는 JintEngine
에 뭔가를 통과 할 수 있을지 모르겠어요,하지만 당신은 주어진 COM ProgID를위한 인스턴스를 생성하는 사용자 정의 함수를 등록 할 수 있습니다 :
private delegate object CreateActiveXObjectDelegate(string progId);
private static object CreateActiveXObject(string progId)
{
var type = Type.GetTypeFromProgID(progId);
if(type!=null)
{
return Activator.CreateInstance(type);
} else
{
return null; // alternatively throw an exception or whatever is suitable in your situation
}
}
그런 다음 당신이 등록 할 수 있습니다를 다음 스크립트에서 호출 할 수 있습니다 JintEngine
의 함수로이 방법은 : 그것은 오류가 방법이 정의되지 않은 말을 내 예에 실패 MyObject.Run
를 호출 할 때
string script = @"
function square() {
MyObject = createActiveXObject('WScript.Shell');
MyObject.Run('whatever');
return 2 * 2;
};
return square();
";
var jintEngine = new JintEngine();
jintEngine.DisableSecurity(); // required, cannot tell why exactly
jintEngine.SetFunction("createActiveXObject", (CreateActiveXObjectDelegate)CreateActiveXObject);
var result = jintEngine.Run(script);
jint를 반사를 사용합니다 : 실행. 나는 Run
COM-Interop과 반사가 까다로워 질 수 있기 때문에 (나는 MethodInfo
이 기본 COM 유형에서 검색 될 수 없다고 생각한다) 호출하지 않는다고 생각한다. (: System.Diagnostics.Process.Start
어쩌면 더 나은 또는) :
private delegate void Runner(string progId);
private static void ShellRun(string command)
{
var type = Type.GetTypeFromProgID("WScript.Shell");
if(type!=null)
{
var shell = Activator.CreateInstance(type);
type.InvokeMember("Run", BindingFlags.InvokeMethod, null, shell, new object[] {command});
}
}
그런 다음 스크립트 (run
로 등록) 당신에게서 ShellRun
전화 :
string script = @"
function square() {
run('whatever');
return 2 * 2;
};
return square();
";
var jintEngine = new JintEngine();
jintEngine.DisableSecurity(); // required, cannot tell why exactly
jintEngine.SetFunction("run", (Runner)ShellRun);
var result = jintEngine.Run(script);
다른 접근 방법은 단순히 WScript.Shell.Run
를 호출하는 기능을 등록 할 수 있습니다
희망이 도움이됩니다.
무엇이 오류입니까? –
오류 : ActiveXObject가 정의되지 않았습니다. 줄 : 3 문자 : 20 소스 코드가 없습니다. –