Sep 232009
 

Wenn das bestimmt werden soll wird es schwierig. Ich musste einem Problem nachgehen das auftaucht wenn man mit der VSTO unter Excel in einem 64Bit OS arbeitet. Gewisse Operationen verursachen folgende Fehlermeldung:

Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

Abhilfe schafft der Artikel KB320369. Der Fehler wird offensichtlich auf einen Fehler in der VSTO zurück geführt.

Ich wollte den Hack aber nicht auch unter 32Bit OS anwenden. Aber dafür muss ich irgend wie bestimmen ob der Code unter einem 64Bit oder 32Bit OS ausgeführt wird. Das .NET Framework scheint da keine Methode anzubieten um das einfach zu lösen. Im Internet sind  einige kuriose Lösungen für das Problem zu finden.

Ich habe jetzt folgende umgesetzt die unter Vista 64Bit und Windows 7 32Bit funktioniert.

//Nicht vergessen
using System.Runtime.InteropServices;


[DllImport("kernel32.dll")]
private static extern uint GetSystemWow64Directory(StringBuilder lpBuffer, uint uSize);
internal static byte GetOSBitness()
{
    StringBuilder lpBuffer = new StringBuilder(260);
    uint uSize = GetSystemWow64Directory(lpBuffer, 260);
    if (uSize > 0) return 1; //64-bit
    return 0; //32-bit
}

Gefunden –> HOWTO: Detect Process Bitness

Diese Lösung funktioniert aber nur ab Windows XP (MSDN).

kick it on dotnet-kicks.de