Soci (Soczó Zsolt) szakmai blogja

2008.07.31.

Uninstalling .NET Framework 2.0 SP2 and 3.5 SP1 in Vista

Filed under: .NET,C++/CLI,CLR,Szakmai élet — Soczó Zsolt @ 23:23

Recently I had a run-time heap corruption problem in our software which is caused by some internal changes in the beta CLR and .NET Framework assemblies. This software uses lots of interop code, it become broken because of these changes in the fw.
So, I decided to uninstall the beta frameworks from my machine but it’s happened to be not such a trivial thing to do. I asked Aaron Stebner in Microsoft for some help who responded me kindly and promptly. Thanks for it. :)

Here is his answer:

“The original version of the .NET Framework 3.5 included the .NET Framework 2.0 SP1 and 3.0 SP1, but it created separate Add/Remove Programs entries for 2.0 SP1 and 3.0 SP1 so you could uninstall all of the pieces as long as you uninstalled in the exact order of 3.5, 3.0 SP1, 2.0 SP1. That same behavior should be the case for 3.5 SP1 as well.

One thing that might be different here – on Windows Vista and Windows Server 2008, the .NET Framework 2.0 and 3.0 are OS components, so they will not show up in Add/Remove Programs. If you are running one of these OS’s, you will need to use steps like this to remove the .NET Framework 2.0 SP2 and 3.0 SP2:

1. Uninstall the .NET Framework 3.5 SP1 product from the Programs and Features control panel
2. In the Programs and Features control panel, click the link on the left named View Installed Updates
3. In the list of installed updates, look for an item named Update for Microsoft Windows (KB948609) – this is the .NET Framework 3.0 SP2
4. Right-click on the item and choose Uninstall
5. In the list of installed updates, look for an item named Update for Microsoft Windows (KB948610) – this is the .NET Framework 2.0 SP2
6. Right-click on the item and choose Uninstall
7. Reboot”

So, the key to uninstall these beta bits from your Vista machine is to remove KB948609 and KB948610 hotfixes.

Apparently the fw. rollback healed our application. We will investigate this problem if it comes up in the RTM bits too (in few weeks I think). I hope it won’t. :)

Bocs, de ezt Aaron kérésére angolul írtam.
A lényeg, hogy ha Vistán le kell szedni az SQL 2008 RC0 vagy más által felrakott beta NET Framework 2.0 SP2-t és 3.5 SP1-et, akkor a KB948609 és KB948610 hotfixeket kell uninstallálni.

2008.01.11.

C++/CLI addin reflectorhoz

Filed under: .NET,C++/CLI,Szakmai élet — Soczó Zsolt @ 11:23

Ha egy kódot nem C#-ban, hanem C++/CLI-ben írtak, akkor reflectorral C#-ra visszafejtve elég ronda lesz, mert a C++-ban vannak dolgok, amik C#-ban nem reprezentálhatók, mint a const módosító.

Ezért jöhet jól a C++/CLI addin, amivel “eredetiben” nézhetjük meg az assemblyk belsejét. Az SQL Server 2008 típusait C++/CLI-ben írták, így érhető, miért kellett ez nekem…

2007.07.24.

Sorszámozott paraméterek a printfben

Filed under: C++/CLI,Szakmai élet — Soczó Zsolt @ 19:28

.NET-ben már hozzászoktam a {1} stb. paraméterekhez a stringek formázásakor. Furcsa volt visszatérni a printf %izéihez. De most olvastam, hogy itt is van indexelt variáns. printf_p és társai. Jó tudni róla.

2007.03.03.

ATL Server: Visual C++ shared source software

Filed under: ATL,C++/CLI,Szakmai élet — Soczó Zsolt @ 12:09

Valaha még jól jöhet.

The following parts of ATL Server will part of the shared project:

  • Core ATL Server Framework classes in atlisapi.h, atlstencil.h, atlserr.h
  • Caching classes in atlcache.h
  • Cryptography classes in atlcrypt.h
  • HTML generation on server side and reading on client sides in atlhtml.h
  • Performance monitoring classes in atlperf.h
  • Extension management classes in atlextmgmt.h
  • Server and client side support for SOAP based Web services in atlsharedsvc.h, atlsoap.h
  • Session-state classes and interfaces in atlsession.h
  • MIME/SMTP support in atlmime.h and atlsmtpconnection.h
  • Regular Expression support from atlrx.h
  • Stream helpers in atlsoap.h and atlhtml.h
  • Many of the ATL Server tutorials, samples and help pages

2007.01.23.

Hogyan kell a type library-t beágyazni a DLL-be (C++)?

Filed under: C++/CLI,Szakmai élet — Soczó Zsolt @ 16:32

Furcsa módon az IE nem képes scriptből meghívni egy ojjektum metódusát, ha nincs hozzá type lib. Azt gondoltam az IDispatch-hez nem kell tlb, de csak így működött jól.

Így kell berakni a type library-t erőforrásként a kimeneti dll-be. Sajnos az ATL type library regisztráló izéje csak a HKCR-ba hajlandó telepíteni a TLB-t, nekem viszont mindent a HKCU-ban kell megoldanom, hogy nonadmin is telepíthesse a komponenst.

Ezért kézzel kell regisztrálni az rgs-sel, pl. így:

[source:C++]
HKCU
{
NoRemove Software
{
NoRemove Classes
{
NoRemove TypeLib
{
ForceRemove {8A786A39-7654-4FE0-880F-4E2AA5166D3A}
{
1.0
{
0
{
win32 = s ‘%MODULE%’
{
}
FLAGS = s ‘0’
{
}
HELPDIR
{
}
}
}
}

}
}
}
}

[/source]

2006.10.31.

C++ refactoring

Filed under: C++/CLI,Szakmai élet — Soczó Zsolt @ 12:56

Mivel mostanában C++-ban is dolgozok, hiányozni kezdtek a .netben megszokott refactoring eszközök. Rákerestem, és letöltöttem a Ref++-t. Egyenlőre még csak ízlelgetem, de úgy néz ki hasznos kis jószág lesz. Ha többet használtam majd írok róla.

2006.07.03.

Az elmúlt hét tanulságai

Filed under: .NET,C#,C++/CLI,CLR,Szakmai élet — Soczó Zsolt @ 16:06

Hajmeresztő (szerencsére csak szakmailag) időszakon vagyok lassan túl, ezért is nem blogoltam már régen.

Pár vegyes tanulság az elmúlt időszakból, zöme magamnak is emlékeztető:

  • A C/C++ secure stringkezelő (és egyéb) függvények nem úri huncutságok, és nem csak security szempontjából fontosak. A buffer overrun fogalom sok embernek a hekkeléssel forrt össze, pedig adatvesztések, instabilitások is gyakran következményei. Ha egyszer vannak rá normális függvények, és a kódok átírása se olyen vészes (tudom, mert átírtam vagy 100 függvényhívást az új függvényekre), akkor nem látok okot nem megtenni. Ahol a régi kód kussol, csendben elbassza a dolgokat az új visong. Ugyanez a helyzet a /GS kapcsolóval is (stack overrun ellenőrzés), valamint a /analyze opcióval (prefast) is. Igenis hallgatni kell rájuk, mert értelmes hibákat szúrnak ki.
  • Ha az IIS alatt nem megy egy website, Service Unavailable hibával nem indul a worker process, és 0x80004005-ös (Access Denied) hiba van az eventlogban, akkor az iis valahol nem tud írni vagy olvasni. Jelentős FileMon/Regmon erőfeszítéseim ellenére se jöttem rá mi hiányzik neki, de az aspnet_regiis -ga megadja a szükséges jogokat a futtatáshoz.
  • Ha egy osztály IDisposable, akkor kurvára meg kell hívni a Dispose metódust. Nem tudok elég nagy betűket rendelni ehhez:

Használd a C# usingot, bmeg!!!

Én a DirectoryServicessel szívtam meg, mivel az nemmanazsolt kódot és erőforrásokat hívokat a háttérben úgy fejreáll mint állat pár száz allokált objektum után, ha nem Disposolunk keményen.

  • A backup hasznos dolog. Ennek hiányában a GetDataBack-kel számottevő sikereket érhetünk el. A rendszergazda meg barátkozzon össze a kapa nyelével a megfelelő testrészén.

2006.06.02.

Ingyenes könyv: Designing Components with the C++ STL

Filed under: C++/CLI,Szakmai élet — Soczó Zsolt @ 10:09

Letölthető innen. Hihetetlen mennyiségű könyvet lehet manapság legálisan/kevésbé legálisan letölteni. Ezért pl. Russinovich-ék nem adták ki online elekronikusan a Windows Internals új kiadását.

2006.05.12.

STL kérdés – tud valaki segíteni?

Filed under: C++/CLI,Szakmai élet — Soczó Zsolt @ 11:04

Itt van ez a gyík egyszerű kód, amiről fogalmam sincs miért nem fordul le. Előre szólok, nem értek az STL-hez, most kezdem ugatni. Vagy ATL? Mondom, értek hozzá. :)

#include "atlbase.h" #include "list"
typedef CComQIPtr CUnknownPtr;
// identity typedef std::list IUnknownList;
void Test()
{  
IUnknownList list;  
CUnknownPtr ptr;  
list.push_back(ptr);
};
A vc8 ezt mondja rá:
cl a.cpp /EHsc
C:Program FilesMicrosoft Visual Studio 8VCINCLUDElist(1163) :
error C2664: 'std::allocator<_Ty>::construct' :
cannot convert parameter 1 from 'IUnknown **' to 'ATL::CComQIPtr *'        
with         [             _Ty=CUnknownPtr         ]        
Types pointed to are unrelated; conversion requires reinterpret_cast,
C-style cast or function-style cast        
C:Program FilesMicrosoft Visual Studio 8VCINCLUDElist(1154) :
while compiling class template member function
'std::_List_nod<_Ty,_Alloc>::_Node *std::list<_Ty>::
_Buynode( std::_List_nod<_Ty,_Alloc>::_Node *,std::_List_nod<_Ty,_Alloc>::_Node *,const _Ty &)'
        with         [             _Ty=CUnknownPtr,             _Alloc=std::allocator         ]        
a.cpp(10) : see reference to class template instantiation 'std::list<_Ty>' being compiled        
with         [             _Ty=CUnknownPtr         ]

2006.05.04.

Pointerek C++/CLI-ben

Filed under: C++/CLI,Szakmai élet — Soczó Zsolt @ 15:41

A céges warék nagyon sok Managed C++ kódot tartalmaznak, mivel részben C++-ról lesznek átírva .NET-re.

A pointerek kezelése C++/CLI-ben elég ravasz, ezekről találtam két cikket. Főleg a második, ami a Pinning Pointerekről szól hasznos, ha valakinek stringeket kell átlódítani a két oldal között.

Powered by WordPress