2012-04-20 2 views
3

내 시스템에서이 자료 링크 DLL이 - Interop.MSDASC.dll이 같은 파워 쉘에서 같은로드하려고 -파워 쉘의 V2 ::의 COM Interop를 DLL을로드

[Reflection.Assembly]::LoadFile("C:\Interop.MSDASC.dll") | out-null 

을하지만 다음 오류가 발생합니다. -

Exception calling "LoadFile" with "1" argument(s): "Could not load file or assembly 'Interop.MSDASC.dll' or one of its dependencies. is not a 
valid Win32 application. (Exception from HRESULT: 0x800700C1)" 
At line:1 char:32 
+ [Reflection.Assembly]::LoadFile <<<< ("C:\Interop.MSDASC.dll") | out-null 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 

어떻게 올바르게로드합니까?

답변

8

이것은 32 비트 COM 개체이므로 32 비트 PowerShell 인스턴스에서로드해야합니다. 이 폴더에는 powershell.exe 또는 powershell_ISE.exe을 실행할 수있는 Windows의 64 비트 버전에서이 작업을 수행하려면 %의 SYSTEMROOT % \ SysWOW64와 \의 WindowsPowerShell \ V1.0

그리고, 이것은 전체 코드입니다 :

[Reflection.Assembly]::LoadFile("C:\Interop.MSDASC.dll") 
$dataLinkInstance = new-object MSDASC.DataLinksClass 
$dataLinkInstance.WriteStringToStorage("C:\\FrmPowershell.udl", "Provider=SQLOLEDB.1;", 2) 
3

난 그냥 당신이 사용하는 것과 동일한 방법으로 http://datadictionary.codeplex.com/ 및로드 어셈블리에서 다운로드 한 아무 문제가 오지 :

[System.Reflection.Assembly]::LoadFile("c:\Program Files\DataDictionaryCreator\Interop.MSDASC.dll") 

GAC Version  Location 
--- -------  -------- 
False v2.0.50727  c:\Program Files\DataDictionaryCreator\Interop.MSDASC.dll 

는 64 요원 시스템에 어쩌면 당신이 있습니까? 예 해당하는 경우 여기를 읽으십시오 http://datadictionary.codeplex.com/workitem/28807

+0

Powershell의 맥락에서 말하고 있습니까? –

+0

예. PowerShell에 어셈블리를로드하면 괜찮습니다! 나는 윈도우 7 x86에있어. –

+0

차가움. 하지만, .Net 응용 프로그램은 없습니다. 나는 단지 직접 interop DLL을로드하려고하고있다. 나는 Windows 7 64 비트입니다. 나는 아직도 이유를 알아낼 수 없다? 어떤 단서? 나는 프레임 워크 32 폴더에서 WOW6432node 아래에 등록되도록 regasm을 시도 할 것인가? –

관련 문제