Ho un programma di aggiornamento, i file estratti dal server hanno misto dll vb6 e .net dll in una directory. come determinare se una dll è una COM? (così posso invocare regsvr32 dal programma di aggiornamento)Come determinare se la DLL è COM o .NET?
risposta
Credo che un modo per farlo sarebbe provare a caricare il file con System.Reflection.Assembly.LoadFile(). Se ottieni una BadImageFormatException, non è un assembly .NET valido. Probabilmente c'è un modo più ordinato per farlo, ma dovrebbe funzionare.
Sembra molto lavoro scrivere un programma di installazione che invece di monitorare con attenzione quali DLL devono essere registrate. Ma +1 in ogni caso – Tim
Perché non basta chiamare regsvr su ognuna di esse. Se si registrano allora ok, se non è un grosso problema.
Probabilmente è meglio scrivere un programma di installazione che abbia la conoscenza di quali sono e quali fanno la cosa giusta per ciascuno.
EDIT
Se siete preoccupati per "errori" che emettono, non preoccupatevi.
È possibile sopprimere i messaggi. (/ s)
[@Hao] (http://stackoverflow.com/users/55327/hao) - nonostante la mia risposta alternativa, sono d'accordo con Tim. –
@AJ: il problema con regsvring ciecamente, se la DLL è di tipo .NET, il regsvr32 emette un errore – Hao
http://support.microsoft.com/kb/249873 - usa la bandiera silenziosa ... – Tim
Per eseguire questa operazione, è possibile esaminare il PE per ottenere ulteriori informazioni sul tipo di materiale esportato da ciascuna DLL. C'è lo a pretty interesting article on MSDN che parla della struttura. Se capisci la configurazione, puoi identificare i collegamenti a .Net (e quindi la mancanza che indica una pura DLL COM).
Oggi ho esaurito i voti. Tornerò e voterò questo. È una buona risposta tecnica. – Tim
@ [Tim] (http://stackoverflow.com/users/26177/tim) - thanks :) Questo non è per i deboli di cuore, ma con un po 'di sforzo potrebbe fornire una soluzione piuttosto solida.Se lo scenario è qualcosa di più elevato rispetto all'assemblaggio, questo approccio dovrebbe essere affidabile (leggi: non troppi PE "ottimizzati" da trattare). –
Perché non fare la cosa giusta e registrare quelli che conosci sono server COM e saltare quelli che non lo sono? Dovresti avere queste informazioni e puoi codificarle nel tuo programma di installazione. – Tim
@Tim - Immagino che potrebbe esserci una situazione in cui gli editori del codice non sono la stessa organizzazione dei consumatori - altrimenti sono d'accordo - controllo il processo in modo esplicito. –
@ AJ - che ancora non significa che non si possa capirlo e testarlo. Il mio punto è che se fa parte del processo di installazione, è necessario SAPERE ciò che deve essere registrato. Non farlo è sciatto e poco professionale. È un semplice test per farlo in anticipo. Perché vorresti aggiungere il codice quando tutto ciò che devi fare è determinarlo in anticipo? – Tim