Domanda

Ho creato i manifest necessari per la mia DLL del server COM e un'applicazione client per funzionare senza registrazione in Windows XP. Ho provato tutti i tipi di combinazioni (con e senza una registrazione) e in ogni caso l'applicazione client vede la versione side-by-side della libreria se sono presenti i manifest e quella registrata se no (o un errore COM se non c'è alcuna registrazione). Ho testato sulla mia macchina di sviluppo di Windows XP e ho consegnato i file (DLL, client EXE e un manifest per ciascuno) ai colleghi, che hanno anche eseguito tutto con successo sui propri computer Windows XP. I manifest sono file XML esterni, non risorse incorporate. Fin qui tutto bene.

Tuttavia, quando copio i file su una macchina Windows Server 2003, non funziona. Ottengo un errore silenzioso, ma un errore dell'applicazione nel registro eventi dell'applicazione (vedi sotto). Se annullo la registrazione della DLL e rimuovo i manifest, visualizzo un errore simile (non disponibile al prompt dei comandi, ma un errore dell'applicazione nel registro eventi). Ovviamente c'è qualche problema nel trovare la registrazione. L'ho riprodotto su ogni macchina Windows Server 2003 a cui posso accedere presso la nostra azienda. Secondo la documentazione Microsoft su COM side-by-side / senza registrazione, dovrebbe funzionare su Windows XP e versioni successive e Windows Server 2003 e versioni successive.

Per essere chiari, lo stesso client funziona perfettamente su quegli stessi computer Windows Server 2003 con una versione registrata ( cioè, utilizzando regsvr32) della stessa DLL COM, in le stesse credenziali di accesso che sto cercando di utilizzare per COM senza registrazione. In altre parole, non ci sono problemi intrinseci mascherati da problemi COM privi di registrazione: questo client e server funzionano correttamente quando il server è registrato globalmente nel registro.

Qualcuno ha qualche idea su come indagare ulteriormente? Non sono un esperto di Windows Server, ma esiste forse qualche impostazione di criterio che dovrebbe essere modificata per abilitare questo supporto? Se riesco a individuare il cambiamento necessario, il nostro personale di supporto tecnico / infrastruttura probabilmente non lo farà probabilmente, ma non posso fare affidamento su di loro per ricercare il problema anche quando sono sommersi.

Nel caso in cui sia importante (non credo che dovrebbe, ma non si sa mai) la DLL è scritta in Delphi 2007, mentre il client è scritto in Visual C ++.

Event Type: Information
Event Source:   Application Error
Event Category: (100)
Event ID:   1004
Date:       5/2/2009
Time:       8:07:45 AM
User:       N/A
Computer:   ***server name****
Description:
Reporting queued error: faulting application ***program name***.exe, version 0.0.0.0, faulting module ***program name***.exe, version 0.0.0.0, fault address 0x0002ac9e.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
È stato utile?

Soluzione

Una cosa da cercare è che l'exe abbia un manifest interno. In XP, l'ordine di ricerca manifest exe è esterno quindi interno. In Server 2003 e versioni successive, l'ordine è interno quindi esterno.

Altri suggerimenti

Con un server COM creato in Delphi 7, ho riscontrato problemi simili se il server COM non è stato registrato e l'applicazione client è stata avviata con un account utente limitato, poiché l'implementazione COM di Delphi ha sempre cercato di aggiornare le informazioni di registrazione, anche quando le DLL La funzione RegisterServer non è stata chiamata esplicitamente.

Per verificare se si tratta di un problema, provare a eseguire l'applicazione client su un account con privilegi amministrativi illimitati.

MSDN menziona che in Windows 2003 i problemi con i server COM liberi da registrazione dovrebbero essere dettagliati in una sezione specifica del registro eventi di sistema:

  

Durante la risoluzione dei problemi senza registrazione   Problemi di COM, il Visualizzatore eventi attivo   Windows Server 2003 è tuo amico.   Quando Windows XP o Windows Server 2003   rileva un errore di configurazione   in genere mostra una finestra di messaggio di errore   intitolato per l'applicazione che hai   avviato e contenente il messaggio   " Impossibile avviare questa applicazione   perché la configurazione dell'applicazione   non è corretto. Reinstallazione di   l'applicazione potrebbe risolvere questo problema. " io   avvisalo ogni volta che vedi questo   messaggio su cui riproduci il problema   Windows Server 2003, consultare il   Registro eventi di sistema e cercare eventi   dalla fonte SideBySide. La ragione   Non ti consiglio di guardare   Il registro eventi di Windows XP in questi casi è   che conterrà invariabilmente a   messaggio come " Genera attivazione   Contesto non riuscito per [percorso] [applicazione   filename] manifest. Errore di riferimento   messaggio: operazione completata   successo, " che non aiuta   identificare il problema.    http://msdn.microsoft.com/en-us/library/ ms973913.aspx # rfacomwalk_topic6

Inoltre, se possibile, comunicaci i nomi dei file e il contenuto dei file manifest che usi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top