2012-05-07 10 views
11

Uno strano errore:errore MSB8011 Solving: Impossibile registrare l'uscita

error MSB8011: Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions. C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets 744

ho ottenuto questo errore quando si tenta di utilizzare OpenSceneGraph (OSG) in un controllo ActiveX. Una ricerca su Google ha mostrato tutti i tipi di soluzioni che non risolvono realmente il problema o individuano la causa esatta dell'errore, quindi vorrei mettere la soluzione in un unico punto: qui.

Ho trovato la soluzione e presto risponderò alla mia domanda, in modo che le persone possano trovare la soluzione se incontrano lo stesso problema.

risposta

20

Questo errore si verifica quando Visual Studio (2010) non riesce a trovare i file dll dipendenti richiesti dal programma per la creazione di OCX. L'OCX viene creato nella directory Debug del progetto (per le build di Debug) e la specifica "Directory di lavoro" (nelle impostazioni del progetto) come cartella in cui si trovano le DLL dipendenti non aiuterà Visual Studio a localizzare le DLL.

Ora il problema è (questo è ciò che lo rende un mal di testa per risolvere il problema) che a volte, senza che Visual Studio sia in grado di creare l'OCX, non sarà possibile eseguire Dependency Walker su OCX. Quindi non capirai mai che le DLL mancanti sono il problema.

Se si sa quali DLL devono essere collocate nella cartella Debug, è sufficiente posizionarle lì e l'errore scompare. Se non lo sai, e se il tuo OCX non è stato creato, vai a Impostazioni progetto> Linker> Generale> Registra Output e imposta il valore su "No". Questo creerà il tuo OCX per te, ma non passerà attraverso il processo di registrazione, che è quando ha bisogno delle DLL dipendenti.

Dopo aver fatto doppio clic su OCX e Dipendente Walker mostra le DLL mancanti con icone di cerchi gialli, è sufficiente posizionare quelle DLL nella stessa cartella di OCX e il programma funzionerà correttamente. È così semplice.

+0

Molto utile. Ottenere un OCX costruito e usare dependency walker mi ha aiutato a identificare il problema - risulta che non avevo i file a 64 bit da cui dipendeva (sono stati trovati moduli con diversi tipi di CPU). –

+0

Esiste comunque la possibilità di eseguire questa operazione senza copiare le DLL nella directory di debug? Preferisco specificare un'altra directory che contiene la DLL, proprio come la proprietà delle directory di libreria aggiuntive che utilizza per trovare la lib. – Steiny

+0

È un problema comune. Anche io volevo una soluzione: http://stackoverflow.com/questions/4953843/why-cant-visual-studio-find-my-dll e così ha fatto questi ragazzi http://stackoverflow.com/questions/2119539/ visual-studio-how-to-set-path-to-dll e http://stackoverflow.com/questions/428085/how-do-i-set-a-path-in-visual-studio – Nav

1

MSB8011 sembra essere un errore generico generato ogni volta che regsvr32 incontra un problema. Nel mio caso, regsvr32 è uscito con il codice 4 quando la registrazione per utente è stata impostata su "Sì", ma la DLL che stavo creando non definiva un punto di ingresso DllInstall.

7

Il problema potrebbe essere che il progetto tenta di registrare un oggetto COM, ma non ci sono privilegi sufficienti per farlo. Su Windows 7 e 8 regsvr32 richiede autorizzazioni amministrative.

Quello che puoi fare è il seguente. Creare un collegamento sul desktop su C: \ Windows \ SysWOW64 \ cmd.exe (la console a 32 bit). Fare clic con il tasto destro, Proprietà -> Avanzate -> selezionare Esegui come amministratore. Avvia il collegamento e assicurati che il Controllo di accesso utente venga visualizzato e fai clic su Sì. Inizia a costruire da questa finestra speciale della console.

1

È inoltre possibile farlo tramite VS 2013 IDE avviando questo IDE da collegamento ai file di programma, selezionare Visual Studio 2010/2013 e quindi fare clic con il pulsante destro del mouse e selezionare Esegui come amministratore, dopo l'avvio di IDE, quindi aprire il file della soluzione e crearlo , si potrà mai ottenere tali errori a causa della regsrv32 registrazione DLL/COM

1

Sulla pagina Property andare a

Configuration Properties->Build Events->Post-Build Event

si potrebbe essere riferendo ad esso come un /Service. La modifica delle opzioni come mostrato di seguito potrebbe aiutare.

Prima modifica:

Before modification

Dopo la modifica:

After modification

Questo mi ha aiutato, spero che vi aiuterà anche voi.

0

Ho provato a utilizzare come "Amministratore" VS 2015, è in grado di risolvere il problema