c # – Microsoft Access ne s'installe pas correctement dans Windows Server 2012 R2 – Les meilleures astuces pour son serveur

J'ai un code d'automatisation C # qui extrait des données de Microsoft Excel. Lorsque j'essaie d'exécuter ce code sur une machine virtuelle (Windows Server 2012 R2), le message d'erreur ci-dessous s'affiche.

& # 39; System.Runtime.InteropServices.COMException (0x80040154): Récupération
Fabrique de classe COM pour composant avec CLSID
00024500-0000-0000-C000-000000000046 a échoué pour l'une des raisons suivantes
erreur: 80040154 Classe non enregistrée (exception de HRESULT:
0x80040154 (REGDB_E_CLASSNOTREG)). & # 39;

J'ai trouvé que Microsoft Access n'est pas installé et j'ai essayé d'installer le même (Microsoft Access 2013 Runtime), l'installation est réussie. Mais étrangement, il n'est pas complètement installé. en C: Fichiers de programme (x86) Microsoft Office Office15 Je ne vois que quelques DLL (dll Microsoft.Office.Interop.Access manquantes dans les références de projet) par rapport aux DLL de mon système local. De plus, il n'y a pas d'enregistrement dans le registre avec la clé 00024500-0000-0000-C000-000000000046

Code pour obtenir des données à partir d'Excel

    dictionnaire statique public GetExcelData (strict testDatapath, strict testDataSheet, strict test caseID)
{
testCaseValues.Clear ();
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application ();
Classeur = null;
Gamme gamme = zéro;
bool arrayFlag = false;
int iVal = 0;
ArrayList excelValues ​​= new ArrayList ();
ArrayList header = new ArrayList ();
essayer
{
app.Visible = false;
app.ScreenUpdating = false;
app.DisplayAlerts = false;
bok = app.Workbooks.Open (testDatapath);
Console.WriteLine ("récupère Excel à partir de" + testDatapath);
foreach (Feuilles de travail en feuilles. Feuilles de travail)
{
if (sheet.Name.Equals (testDataSheet))
{
Console.WriteLine ("La fiche de test est" + testDataSheet);
// obtenir une sélection pour travailler avec
range = sheet.get_Range ("A1", Missing.Value);
// place la fin des valeurs à droite (s'arrête à la première cellule vide)
range = range.get_End (XlDirection.xlToRight);
// termine les valeurs vers le bas, voir dans la dernière colonne (s'arrête à la première cellule vide)
range = range.get_End (XlDirection.xlDown);
// récupère l'adresse du bas, cellule de droite
strict downAddress = range.get_Address (false, false, XlReferenceStyle.xlA1, Type.Missing, Type.Missing);
// Obtenir la plage, puis les valeurs de a1
range = sheet.get_Range ("A1", downAddress);
sujet[,] valeurs = (objet[,]) Range.Value2;
// Pour attacher les valeurs d'en-tête
pour (int headCount = 1; headCount <= values.GetLength (1); headCount ++)

essayer

header.Add ((string) values.GetValue (1, headCount));
arrayFlag = true;

capture (Exception ApplicationException)

Console.WriteLine (ApplicationException.Message);
arrayFlag = false;
pause


// Récupérer les données de test
if (arrayFlag == true)

pour (int i = 1; i <= valeurs.GetLength (0); i ++)

pour (int j = 1; j <= valeurs.GetLength (1); j ++)

strictement actualTestCaseID = (chaîne) values.GetValue (i, 1);
// Console.WriteLine ("Le cas de test réel est" + actualTestCaseID);
if (actualTestCaseID.Equals (testID case))

Console.WriteLine ("Inside if");
iVal = i;
arrayFlag = true;
pause




if (arrayFlag == true)

// Ajouter des valeurs Excel
pour (int j = 1; j <= valeurs.GetLength (1); j ++)

excelValues.Add ((string) values.GetValue (iVal, j));

// Créer HashmapTable
int colCount = sheet.UsedRange.Columns.Count;
pour (int hashVal = 0; hashVal <= colCount - 1; hashVal ++)

si (excelValues[hashVal] ! = null)

testCaseValues.Add (en-tête[hashVal].ToString (), excelValues[hashVal].ToString ());

autrement

testCaseValues.Add (en-tête[hashVal].ToString (), "");




pause
}
}
}
prise (exception e)

caste e;

enfin

plage = zéro;
si (livre! = null)
book.Close (false, Missing.Value, Missing.Value);
bok = null;
si (app! = null)
app.Quit ();
app = null;


renvoyer testCaseValues;
}

Je m'attends à ce qu'Excel soit correctement installé après l'installation du logiciel "Access runtime", mais comme il est installé, j'obtiens la même erreur que celle décrite ci-dessus.

seulement obtenir les dll disponibles après l'installation

Laisser un commentaire