2012-04-20 26 views
3

我有這樣的數據鏈接DLL我的系統上 - Interop.MSDASC.dll我試圖從Powershell的加載相同這樣的 -PowerShell的V2 ::加載一個COM互操作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對象,因此您必須從PowerShell的32位實例中加載它。要做到這一點在Windows的64位版本,你可以在此文件夾中執行powershell.exe或powershell_ISE.exe: %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 

你也許X64的手術系統上? 如果是這樣讀取http://datadictionary.codeplex.com/workitem/28807

+0

你是否在講述Powershell的情況? – 2012-04-20 18:29:14

+0

是的。在PowerShell中加載的程序集對我來說沒問題!我在Windows 7 x86上。 – 2012-04-20 18:37:55

+0

很酷。但是,我沒有任何.Net應用程序。我只是直接嘗試加載互操作DLL。我在Windows 7 64位。我仍然無法弄清楚爲什麼?任何線索?我會嘗試從Framework 32文件夾做一個regasm,以便它在WOW6432node下注冊? – 2012-04-22 09:44:30