2009-03-06 13 views
21

Fino a poco tempo fa, usavamo felicemente registration-free COM per i nostri componenti COM nativi e .NET. Tuttavia, ci siamo imbattuti in un problema strano in cui la nostra applicazione ha iniziato a bloccarsi in modo casuale su Windows XP SP3 (ma non su Vista) dopo aver modificato solo il numero di versione di un assembly .NET per passare da release candidate a release. (Non odiate la legge di Murphy?)Qualcuno usa correttamente COM senza registrazione con componenti .NET?

Dopo molti giorni persi e digrignare i denti, abbiamo scoperto che il problema era uno known bug in sxs.dll che causa il danneggiamento dell'heap durante il recupero di informazioni su una classe .NET. C'è una hot-fix che fa scomparire il problema, ma le hot fix non sono pensate per essere ridistribuite.

Siamo un po 'perplessi sul fatto che ci sia un bug così orribile nell'implementazione della COM senza registrazione. C'è qualcuno là fuori che utilizza correttamente COM senza registrazione per componenti .NET? Come hai risolto questo problema?

+0

+1 questione importante che non ero a conoscenza di! BTW posso suggerire di aggiungere il tag "regfreecom" in quanto quel tag è più comune per le domande di COM gratuite del Registro di sistema? – MarkJ

+1

... in realtà l'ho appena ricontattato ... spero che sia OK – MarkJ

+0

Sicuro. I tag coerenti sono più utili. –

risposta

9

Questo problema è correlato al modo in cui SxS calcola la dimensione delle informazioni sulla classe. Il numero di versione dell'assembly fa parte di queste informazioni.

Dato che stava lavorando con il numero di versione del candidato, forse la soluzione alternativa per voi è di rendere il numero di versione del rilascio della stessa lunghezza del rilascio RC.

Se ciò non funziona, è previsto un processo per la richiesta di diritti di ridistribuzione per gli hotfix. Vorrei ingaggiare l'assistenza clienti di Microsoft per seguire questa strada.

4

Stiamo utilizzando COM senza registrazione per componenti nativi e .NET. Abbiamo deciso di utilizzare un numero di versione di assembly fisso per questi componenti (principalmente per evitare di ingombrare il registro quando si ripetono più volte i componenti .NET con un numero di build dinamico/*). Non ideale, ma abbiamo altri modi per determinare quale versione di un determinato componente viene utilizzata (non vengono mai patchati singolarmente).

Sembra davvero un problema davvero sgradevole! L'articolo KB sembra quasi che usare SxS sia facoltativo ... Per quanto ne so, è l'unico modo per fare COM reg-free?

+1

Grazie per la risposta. Ascoltare gli altri usando COM reg-free per .NET senza problemi indica almeno che forse siamo stati sfortunati. Si noti che ciò che ha innescato il problema per noi è stato probabilmente un cambiamento nelle dimensioni dell'assemblaggio. Non cambiare la versione probabilmente non ti proteggerà. –