2014-12-17 3 views
0

js에서 vb.net으로 설치 스크립트를 마이그레이션하는 중입니다. 다음과 같은 문제가 있습니다. JS가 늦게 바인딩되어 있으므로 각 메서드에서 반환 한 데이터 형식을 조사하여 vb.net (또는 C#의 경우)에서 강력한 형식의 카운터 파트를 만들 필요가 있습니다.참조되지 않은 어셈블리의 COM 메서드 호출

원본 js 스크립트를 설치, 내가 모르는 점에 얻고 방법 포트이 2 전화 : I 데이터 타입 추론을두면

var objWMIService = GetObject("winmgmts:\\\\.\\root\\cimv2"); 
var objAccount = objWMIService.Get("Win32_SID.SID='S-1-1-0'"); 

, 나는 COMType을 얻을, 그래서 Get 메소드 호출 할 수 없습니다 생성 된 개체에서. I IDispatch를 사용하여이 문제를 해결할 수 있지만 IDispatch를 사용한 지 10 년이 지났으며 정확한 수행 방법을 기억할 수 없습니다.

또한 추가 조사를 통해 내부 COM은 실제로 SW interop 시스템을 생성하기 위해 참조 할 항목을 알지 못하는 SWBemServicesEX 개체라는 것을 알았습니다.

누구든지이 문제에 대한 아이디어 나 해결책을 제공 할 수 있다면 많은 점을 부탁드립니다.

현재 vb.NET 코드는 다음과 같습니다

Dim objWMIService = GetObject("winmgmts:\\.\root\cimv2") 

objWMIService에서 get 메소드를 호출 할 수 방법을 잘하는 방법과이 방법이 실제로 반환을 결정하지!

+0

dll이 등록되었다는 가정 만하면됩니다. 다른 대답은'Type.InvokeMember()'가'IDispatch' 메서드를 사용한다는 것입니다 그래서'Get()'을 동적으로 호출 할 수있다. – Medinoc

+1

Dim objWMIService as Object = GetObject ("winmgmts : \\. \ root \ cimv2")'를 대신 사용해보십시오. 그런 다음 Dim objAccount as Object = objWMIService.Get ("Win32_SID.SID = 'S-1-1-0'")'을 사용할 수 있습니다. 후기 바인딩을 할 때는 모든 것을 객체로 선언하십시오. 그런 다음 디버그에서 코드를 단계별로 실행하고 반환 값을 확인할 수 있습니다. 그런 다음 해당 유형에 대한 메소드/특성/etc를 검색하고 다음 행을 작성하십시오. 약간의 작업이 필요하지만 dll에 대한 참조는 필요하지 않습니다. Theres는 dll이 등록 된 (COM) 또는 .Net이 따르는 경로 (CLR)만을 가정합니다. – Steve

답변

0

나는 스티브가 대답 한 것을 끝내고 나에게 그 문제를 해결했다. 런타임 바인딩에 매우 만족하지 않지만 작업이 완료됩니다! 참조

:

은 객체로 = GetObject를 희미한 objWMIService를 사용해보십시오 ("winmgmts을 :. \ \ 루트 \ cimv2를") 대신. 그런 다음 Dim objAccount를 Object = objWMIService.Get ("Win32_SID.SID = 'S-1-1-0'")과 같이 사용할 수 있습니다. 후기 바인딩을 할 때는 모든 것을 객체로 선언하십시오. 그런 다음 디버그에서 코드를 단계별로 실행하고 반환 값을 확인할 수 있습니다. 그런 다음 해당 유형에 대한 메소드/특성/etc를 검색하고 다음 행을 작성하십시오. 약간의 작업이 필요하지만 dll에 대한 참조는 필요하지 않습니다. DLL이 (COM) 또는 .Net (CLR)이 따르는 경로에

관련 문제