2 votes

Code se comportant différemment dans une dll c# et dans powershell

En C#, j'ai du code comme suit :

OleDbConnection cxn = New OleDbConnection();
cxn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='text;HDR=Yes;FMT=Delimited(,)';Data Source=" + System.IO.Path.GetDirectoryName(csvFilePath);
cxn.Open();
cxn.Close();

Ce code s'exécute sans erreur.

La même chose en PowerShell ressemble à quelque chose comme :

$cxn = new-object System.Data.OleDb.OleDbConnection
$cxn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='text;HDR=Yes;FMT=Delimited(,)';Data Source=" + [System.IO.Path]::GetDirectoryName($csvFilePath);
$cxn.Open();
$cxn.Close();

Mais cela provoque une erreur indiquant :

Exception lors de l'appel de "Open" avec "0" argument(s) : "Le fournisseur 'Microsoft.Jet.OLEDB.4.0' n'est pas enregistré sur la machine"

J'utilise un système d'exploitation Windows Server 2008 R2 64 bits. J'ai également lu un autre message disant que si vous changez Jet.OLEDB.4.0 en ACE.OLEDB.12.0, cela devrait fonctionner. Ça a marché, cependant je ne comprends pas pourquoi la même chose "fonctionne" dans un dll/exe, alors que cela échoue dans PowerShell.

Cependant, le problème auquel je suis confronté est tout à fait différent. Un code similaire est présent dans une application web (service wcf). Je crois que cela s'exécute sur le framework 3.5 (clr 2.0). Un code similaire est également présent dans un service Windows, où cela échoue.

1voto

dugas Points 6626

Cela se produit parce que vous utilisez Microsoft Jet 4.0 (compatible uniquement avec 32 bits) à partir de Powershell 64 bits. Essayez d'exécuter les mêmes commandes à partir de Powershell 32 bits (qui se trouve à : "$env:WINDIR\syswow64\windowspowershell\v1.0\powershell.exe")

La raison pour laquelle cela fonctionne dans IIS est que le pool d'applications est configuré pour permettre l'exécution d'applications 32 bits.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X