2010-12-02 120 views
0

Il y a quelques années, j'ai écrit un programme C# .NET qui utilisait Microsoft ACE et JET OLEDB pour convertir des feuilles de calcul Excel en fichiers CSV. Récemment, nous avons mis à niveau vers un serveur Windows Server 2008 x64. Étant donné que JET était obsolète, cette méthode ne fonctionnait plus. À l'origine, les fichiers .xls d'Excel 2003 étaient traités avec JET et les fichiers .xlsx Excel 2007 étaient traités avec ACE. J'ai changé les chaînes de connexion pour utiliser ACE pour les deux.Invite de commande MDAC OLEDB Problème 32 bits

Nous pouvons maintenant exécuter le programme avec succès via une invite de commande. Cependant, lorsque nous utilisons notre logiciel d'automatisation (qui exécute apparemment le programme de manière similaire à la méthode Start-> Run), nous recevons une erreur indiquant que les composants Microsoft Data Access ne sont pas installés. En les recherchant, il semble qu'ils ne fonctionnent que sur des systèmes 32 bits et ne supportent rien au-dessus de Windows Server 2000.

Des idées? Nous avons installé les derniers pilotes beta x64 ACE OLEDB. Le programme fonctionne bien manuellement. J'ai également essayé de compiler le programme avec une plate-forme cible de x86. Nous avons également exécuté le programme manuellement avec succès en utilisant le compte Windows que le logiciel d'automatisation utilise.

Répondre

1

Sur un Windows 64 bits, le processus définit le nombre de bits: 32 ou 64.

Si vous démarrez un programme en mode 64 bits, et ce programme ne COM (OLEDB est basée sur COM), il recherchera uniquement la DLL COM 64 bits (en fait, elle utilise simplement le côté 64 bits du registre où les composants COM 64 bits sont enregistrés).

Si vous démarrez un programme en mode 32 bits et que ce programme exécute COM, il recherche uniquement la DLL COM 32 bits.

Maintenant, cela peut dépendre de la version du compilateur C#, mais aujourd'hui, la plupart des programmes C# sont configurés pour être compilés comme "Any Cpu". Cela signifie qu'ils fonctionneront en 32 sur un système d'exploitation 32 bits et 64 sur un système d'exploitation 64 bits, ce qui rend les choses assez compliquées si elles utilisent COM directement ou indirectement (parfois, vous ne savez même pas que vous utilisez COM!) .

Alors ... pour résumer:

1) détermine le nombre de bits de votre processus (facile avec le Gestionnaire des tâches, les processus 32 bits sur une machine 64 bits sont suffixes « * 32 »).

2) installez les pilotes COM OLEDB correspondants. Si les pilotes OLEDB n'existent pas en mode 64 bits, vous devrez recompiler votre C# .EXE ou le patcher pour forcer le mode 32 bits. Vous pouvez utiliser l'outil CORFLAGS pour cela.

+0

Merci pour l'aide. Nous avons essayé de changer la plate-forme cible et cela a définitivement changé la façon dont les pilotes oledb fonctionnaient. Cependant, notre programme d'automatisation semble toujours lancer des erreurs MDAC, peu importe ce qu'il exécute. Cela ne semble pas donner le contrôle du programme. –

+0

Si c'est maintenant lancer des erreurs différentes, que vous avez progressé en quelque sorte, et maintenant c'est un problème différent. –

+0

Correct. Il semble que notre logiciel d'automatisation essaie d'utiliser MDAC pour une raison folle. MDAC ne prend même pas en charge les serveurs x64. –