Domanda

Sto lavorando su un provider WMI in-process che carica una libreria nativa di terze parti utilizzando [DllImport]. Le posizioni dll è fissata in c: \ mydllpath. Prima di caricare la DLL ho impostato directory corrente al minut dll, nel metodo Bind () del provider.

Environment.CurrentDirectory = Environment.ExpandEnvironmentVariables ( "% SystemDrive%") + "\ mydllpath";

Provider è costruito per 'Qualsiasi CPU', installato utilizzando gacutil, e installexe.

gacutil.exe / se myprovider.dll

installutil.exe myprovider.dll

Si sta lavorando bene in tutte le piattaforme Windows a 32 bit. Ma nella piattaforma a 64 bit (provato con Windows 7 a 64 bit), non funziona quando prova da WMIC. Ma quando ho provato con il codice WMI creatore, andava bene a lavorare.

Dopo il debug ho trovato sta gettando seguente errore.

System.BadImageFormatException Ulteriori informazioni: Si è tentato di caricare un programma con un formato non corretto. (Eccezione da HRESULT: 0x8007000B)

Dopo aver cercato l'aiuto di internet, è stato suggerito di costruire il provider per x86. Ma fornitore costruito con x86 sta dando un altro errore come ...

ERRORE: Codice = 0x80041013 Description = rottura del carico Provider Funzionalità = WMI

Ho anche provato a caricare le DLL native (in realtà 2 dll, e un file sys) utilizzando / linkref interruttore di comando, ma non è riuscito a causa della non è possibile caricare il file sys usando / linkref.

Ho scritto un'applicazione client di prova # C e mantenere tutti i file ina stesso percorso, è stato lavorando bene. Spero che mi manca alcune configurazioni per l'installazione a 64 bit.

Qualsiasi aiuto sarebbe molto apprezzato e molto grazie in anticipo!

È stato utile?

Soluzione

Avete bisogno il codice per essere a 64 bit? Si può dire di Visual Studio per compilare il codice C # per un eseguibile a 32 bit, quindi utilizzare il 32 bit di DLL native. Questo funziona bene su un sistema operativo a 64 bit.

.NET compila predefinite .net IL a qualunque sia il set di istruzioni native è. Nelle impostazioni di progetto nella scheda di compilazione, se l'obiettivo build è impostato per "Qualsiasi CPU" allora sarà la compilazione a 64 bit su piattaforme a 64 bit, e 32 bit su piattaforme a 32 bit.

Se si modifica questa e la forza di compilazione a 32 bit (insieme a 86), poi sarà la compilazione a 32 bit anche su piattaforme a 64 bit, che consente di utilizzare il vostro 32 bit di DLL.

UPDATE: Su rileggendo la tua domanda, è stato si sta costruendo un provider WMI in-process. Ciò indicherebbe che il provider potrebbe aver bisogno di essere a 64 bit su piattaforme a 64 bit (non so se questo è il caso). Se è così, allora sì .. sei fuori di fortuna.

UPDATE2: Questo articolo sembra indicano che i fornitori di WMI non devono essere a 64 bit a 64 bit del sistema operativo se non in "rare circostanze", quindi forse si può ottenere via con un fornitore di 32 bit.

Altri suggerimenti

mi dispiace amico, fuori di fortuna qui. Se il processo (il processo principale, tutto è iniziato) è in esecuzione a 64 bit non è possibile caricare 32 bit DLL native.

qui è un articolo che descrive alcune delle difficoltà

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top