Igår gjorde jag en COM Interop DLL med Visual Studio 2008 för ett Visual Basic 6 program som inte kan skicka e-post med MAPI i Windows 7. Jag gjorde en liten DLL som skickar via SMTP och på så sätt fungerar det, därtill utan Outlooks säkerhets verifieringar, vilket gör det lättare för användarna. Själva DLL:en gick lätt och snabbt att koda men att få det testat var knepigare. Windows 7 ställde till med en hel del huvudbry.

Första problemet var att det inte gick att registrera COM Interopen med RegAsm om man inte körde med ”Run as administrator”. Nå det gick lätt att fixa genom att göra en batch-fil med kommandot, som jag sedan körde med ”Run as administrator”, men det konstiga var att det ibland fungerade direkt genom att bara kompilera.

Nästa problem var att kompileringen inte kunde byta ut DLL:en mot den nya för att den var i användning av någon process. Jag vet inte varför den var i användning, för det borde den inte varit, men detta gick också att kringå genom att sätta datorn i suspended mode och sedan väcka upp den igen. Ett jäkla fibblande men det fungerade och jag hade bråttom, så jag hade inte tid att reda ut det ordentligt.

Sista problemet var kanske det värsta av dem. Jag hade två projekt, den ena var själva Interop:en som hanterade SMTP och ett annat projekt som använde den. Problemet var att ibland gick referensen till Interop:en sönder men det fixade sej ofta genom att först sätta datorn i suspended mode och sedan starta igen, för att sedan kompilera om DLL:en. Ibland gick det att kompilera flera gånger innan referensen gick sönder men ibland gick den sönder direkt jag kompilerade. Igen gick det att gå runt problemet genom att fibbla..

Vart och ett problem var inte speciellt besvärlig, eftersom de gick att gå runt, men när det hela tiden strulade, så blev det ganska tröttsamt. Sedan var det ju naturligtvis problem med att debugga koden i VB6, eftersom DLL:en måste vara i samma katalog som exe-filen finns. Jag måste erkänna att jag inte vet var den ska vara för att fungera när man exekverar via Visual Studio men i.a.f fungerade den kompilerade koden bra. Det räckte alltså att registrera TypeLibrary:n och sedan ha Interop:en i samma katalog som själva programmet.

Tidsbrist är det värsta. Man har inte tid att reda ut problemen ordentligt, så att man skulle verkligen lära sej något av dem och nästa gång veta hur man ska göra för att det ska gå rätt. Windows 7 ställer till med en hel del extra huvudvärk genom att alltid klaga om rättigheterna. Irriterande när själva kodandet går snabbt men de andra problemen tar tiofalt mera tid att reda ut. Fördelen med att nu köra e-posten via SMTP, är att nu behöver man inte klicka bort Outlooks säkerhetsverifiering. Nackdelen är konfigureringen av systemet. Tidigare hämtades allt via Exchange Server men nu måste man konfigurera det själv. Ska göra så att man kan hämta från Exchange om man vill men då får man säkerhetsverifieringen tillbaka..

Jag övervägde att göra allt med ExtendedMAPI, t.ex. med Outlook Redempition, men det var lite krångligt att få det att fungera och licensen kostar (199$). Priset är ju inget problem, då firman betalar, men jag ville inte ha byråkratin som kommer med det. Alternativet var att göra en wrapper själv men då måste jag koda med C++ och det har jag inte gjort på 15 år och felet måste fixas denna vecka. Alternativet med att göra en Interop som skickar via SMTP var då det snabbaste och säkraste. Jag kodade med VB.Net men jag ska gå över till C#. Övervägde att göra det nu redan men som tur gjorde jag inte det, eftersom problemen hade antagligen fått mej lite på villospår.

Nå, känns bra att få året avslutat med att ha fixat ett besvärligt problem.

Annonser