Come registro un file DLL su Windows 7 a 64 bit?


101

Ho provato a utilizzare il seguente codice:

cd c:\windows\system32
regsvr32.exe dllname.ax

Ma questo non funziona per me. Come posso registrare un file DLL su Windows 7 con un processore a 64 bit?


Visto che questa domanda è contrassegnata con "vb.net", mi chiedo perché stai cercando di registrare una DLL che hai creato in VB.NET. Per essere utilizzato con regsvr32, una DLL deve esportare le funzioni DllRegisterServere DllUnregisterServer. Non è presente alcun registro per la stragrande maggioranza delle DLL create.
Cody Grey

12
Cosa intendi per non funziona o non è utile? Hai ricevuto un messaggio di errore? Cosa dice?
Cody Grey

Risposte:


68

Digita regsvr32 name.dllnel prompt dei comandi (eseguito in modalità elevata!) E premi "Invio". Notare che name.dlldovrebbe essere sostituito con il nome della DLL che si desidera registrare. Ad esempio, se desideri registrare iexplore.dll, digita regsvr32 iexplore.dll.


5
regsvr32 percorso del file .dll con nome ed estensione e premere invio
RK Sharma

202

Bene, non specifichi se si tratta di una dll a 32 o 64 bit e non includi il messaggio di errore, ma immagino che sia lo stesso problema descritto in questo articolo della Knowledge Base: Messaggio di errore quando esegui Regsvr32.exe su Windows a 64 bit

Citazione da quell'articolo:

Questo comportamento si verifica perché il file Regsvr32.exe nella cartella System32 è una versione a 64 bit. Quando si esegue Regsvr32 per registrare una DLL, per impostazione predefinita si utilizza la versione a 64 bit.

Soluzione da quell'articolo:

Per risolvere questo problema, eseguire Regsvr32.exe dalla cartella% SystemRoot% \ Syswow64. Ad esempio, digita i seguenti comandi per registrare la DLL: cd \windows\syswow64 regsvr32 c:\filename.dll


13
Perché questa non è la risposta selezionata?
Mike Devenney

5
Questa dovrebbe essere davvero la risposta corretta. Posso capire che nel suo post originale la sintassi non era corretta, ma Rajkumar ha commentato che stava ricevendo un messaggio di errore anche quando si utilizzava la sintassi corretta. Questo richiede due passaggi per trovare la risposta corretta per qualcuno che cerca invece di uno. Prima alla risposta selezionata come corretta, poi seguendo la catena dei commenti, finendo su questo post.
Rob il

102

Se la DLL è a 32 bit:

Copia la DLL in C: \ Windows \ SysWoW64 \
In un prompt dei comandi con privilegi elevati :%windir%\SysWoW64\regsvr32.exe %windir%\SysWoW64\namedll.dll

se la DLL è a 64 bit:

Copia la DLL in C: \ Windows \ System32 \
In un prompt dei comandi con privilegi elevati :%windir%\System32\regsvr32.exe %windir%\System32\namedll.dll

So che sembra il modo sbagliato, ma è così che funziona. Vedere:

http://support.microsoft.com/kb/249873
Quote: "Nota Su una versione a 64 bit di un sistema operativo Windows, ci sono due versioni del file Regsv32.exe:
La versione a 64 bit è% systemroot% \ System32 \ regsvr32.exe.
La versione a 32 bit è% systemroot% \ SysWoW64 \ regsvr32.exe.
"


26
+1 per "So che sembra il modo sbagliato, ma è così che funziona" con collegamento a support.microsoft.com ... senza il collegamento è difficile da credere.
Trevor Boyd Smith

6
"In cmd elevato" è molto importante !!
shindigo

4
Non penso che dobbiamo copiarlo nella cartella system32 o syswow64. Basta registrare il file ovunque si trovi.
Nikos

30

Su un sistema x64, system32 è per 64 bit e syswow64 è per 32 bit (non il contrario come indicato in un'altra risposta). WOW (Windows su Windows) è il sottosistema a 32 bit che viene eseguito nel sottosistema a 64 bit).

È un pasticcio in termini di denominazione e serve solo a confondere, ma è così.

Ancora ...

syswow64 è a 32 bit, NON a 64 bit.

system32 è a 64 bit, NON a 32 bit.

C'è un regsrv32 in ciascuna di queste directory. Uno è a 64 bit e l'altro a 32 bit. È lo stesso accordo con odbcad32 ed et al. (Se vuoi vedere i driver ODBC a 32 bit che non verranno visualizzati con l'odbcad32 predefinito in system32 che è a 64 bit.)


1
Perchè importa? regsvr32si prenderà cura dei dettagli, teoricamente in grado di rilevare se si sta registrando una DLL a 32 bit o 64 bit: stackoverflow.com/questions/18935163/...
Sk8erPeter

8

Apri il menu Start e digita cmd nella casella di ricerca Tieni premuto Ctrl + Maiusc e premi Invio

Questo esegue il prompt dei comandi in modalità amministratore.

Ora digita: regsvr32 MyComobject.dll


6

Finalmente ho trovato la soluzione basta eseguire CMD come amministratore e poi scrivere

cd \windows\syswow64

allora scrivi questo

regsvr32 c:\filename.dll

Spero che questa risposta ti possa aiutare


Se hai già copiato filename.dll nella cartella syswow64 e cambi la directory di lavoro in syswow64 nel prompt dei comandi, il "c: \" in "regsvr32 c: \ filename.dll" non è necessario. In breve, "regsvr32 c: \ filename.dll" dovrebbe leggere "regsvr32 filename.dll"
Josh McKearin

6

Se la DLL è a 32 bit:

  1. Copia la DLL in C: \ Windows \ SysWoW64 \
  2. In cmd elevato:% windir% \ SysWoW64 \ regsvr32.exe% windir% \ SysWoW64 \ namedll.dll

se la DLL è a 64 bit:

  1. Copia la DLL in C: \ Windows \ System32 \
  2. In cmd elevato:% windir% \ System32 \ regsvr32.exe% windir% \ System32 \ namedll.dll

6

Tutto qui stava fallendo come percorso sbagliato. Poi mi sono ricordato di un trucco dei vecchi tempi di Win95. Apri la cartella del programma in cui risiede il file .dll, apri C: / Windows / System32 scorri verso il basso fino a regsvr32 e trascina e rilascia il dll dalla cartella del programma su rgsrver32. Boom, fatto.


2
funziona ma potrebbe essere problematico se è necessario eseguirlo come amministratore.
workabyte

3

Conoscere il messaggio di errore sarebbe piuttosto prezioso. Ha lo scopo di fornire informazioni, anche se non ha alcun senso per te, lo fa per noi. Essendo costretto a indovinare, direi che la DLL è un filtro DirectX a 32 bit. In tal caso, questa dovrebbe essere la giusta linea di condotta:

cd c:\windows\syswow64
move ..\system32\dllname.ax .
regsvr32.exe dllname.ax

Deve essere eseguito a un prompt dei comandi con privilegi elevati in modo che l'UAC non possa interrompere l'accesso al registro richiesto. Fai altre domande su questo su superuser.com


3

Ho appena testato questo metodo estremamente semplice e funziona perfettamente, ma utilizzo l'account amministratore integrato, quindi non devo fare i salti mortali per privilegi elevati.

Il seguente file batch solleva l'utente dalla necessità di spostare i file dentro / fuori le cartelle di sistema. Lascia anche a Windows l'applicazione della versione corretta di Regsvr32.

ISTRUZIONI:

  • Nella cartella che contiene la libreria ( -.dllo -.ax) il file che desideri registrare, apri un nuovo file di testo e incolla UNA delle routine seguenti:

    echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 64-BIT SYSTEMS
    copy %1 C:\Windows\System32
    regsvr32 "%nx1"
    echo END BATCH FILE
    pause
    

    echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 32-BIT SYSTEMS
    copy %1 C:\Windows\SysWOW64
    regsvr32 "%nx1"
    echo END BATCH FILE
    pause
    
  • Salva il tuo nuovo file di testo come file batch ( -.bat); quindi trascina semplicemente il tuo file -.dllo -.axsopra il file batch.

  • Se l'UAC non ti dà la possibilità di eseguire il file batch come amministratore, potrebbe essere necessario elevare manualmente i privilegi (le istruzioni sono per Windows 7):

    1. Fare clic con il tasto destro sul file batch;
    2. Seleziona Create shortcut;
    3. Fare clic con il tasto destro sul collegamento;
    4. Seleziona Properties;
    5. Fare clic sulla Compatibilityscheda;
    6. Seleziona la casella etichettata Run this program as administrator;
    7. Trascina e rilascia il tuo file -.dllo -.axsopra il nuovo collegamento invece del file batch.

È tutto . Ho scelto COPY invece di MOVE impedire il fallimento di qualsiasi tentativo di follow-up relativo all'UAC. La registrazione corretta dovrebbe essere seguita dalla cancellazione del file della libreria ( -.dll o -.ax) originale.

Non preoccuparti delle copie effettuate nella cartella di sistema ( C:\Windows\System32 o C:\Windows\SysWOW64) dai passaggi precedenti: verranno sovrascritte ogni volta che esegui il file batch.

A meno che tu non abbia eseguito il file batch sbagliato , nel qual caso probabilmente vorrai eliminare la copia fatta nella cartella di sistema sbagliata ( C:\Windows\System32 o C:\Windows\SysWOW64 ) prima di eseguire il file batch corretto, ... o ...

  • Aiuta Windows a scegliere il file di libreria corretto da registrare qualificando completamente la sua posizione nella directory.

    1. Dal file batch destro copia il percorso della cartella di sistema
      • Se a 64 bit: C:\Windows\System32
      • Se a 32 bit: C:\Windows\SysWOW64
    2. Incollalo sulla riga successiva in modo che preceda %nx1
      • Se a 64 bit: regsvr32 "C:\Windows\System32\%nx1"
      • Se a 32 bit: regsvr32 "C:\Windows\SysWOW64\%nx1"
        • Incolla il percorso tra virgolette
        • Inserisci la barra rovesciata per separarla %nx1dal percorso della cartella di sistema
      • oppure ...

  • Esegui questo file batch di fucile, che (in ordine):

    1. Eseguire la pulizia dei processi di registrazione interrotti
      • Invertire qualsiasi processo di registrazione completato dal file della libreria;
      • Elimina tutte le copie del file della libreria che sono state salvate in una delle cartelle di sistema;
      • Metti in pausa per consentire di terminare il file batch a questo punto (ed eseguirne un altro se lo desideri).
    2. Tenta l'installazione a 64 bit sul file della libreria
      • Copia il file della libreria in C:\Windows\System32;
      • Registrare il file della libreria come processo a 64 bit;
      • Pausa per consentire di terminare il file batch a questo punto.
    3. Annulla l'installazione a 64 bit
      • Invertire qualsiasi registrazione del file della libreria come processo a 64 bit;
      • Elimina il file della libreria da C:\Windows\System32;
      • Metti in pausa per consentire di terminare il file batch a questo punto (ed eseguirne un altro se lo desideri).
    4. Tenta l'installazione a 32 bit sul file della libreria
      • Copia il file della libreria in C:\Windows\SystemWOW64
      • Registrare il file della libreria come processo a 32 bit;
      • Pausa per consentire di terminare il file batch a questo punto.
    5. Elimina la copia originale e non registrata del file della libreria

Run as administratorè disattivato quando ho creato un collegamento per il file bat. Ho effettuato l'accesso come amministratore. Inoltre, è %nx1o %n1?
Jon Grah

3

C'è una differenza in Windows 7. L'accesso come amministratore non concede gli stessi diritti di quando si esegue un programma come amministratore.

Vai a Start - Tutti i programmi - Accessori. Fare clic con il tasto destro sulla finestra di comando e selezionare "Esegui come amministratore" Ora registrare normalmente la dll tramite: regsrvr32 xxx.dll



3

È necessario eseguire il cmd.exeinc:\windows\system32\ by administrator

Comandi: per l'annullamento della registrazione file * .dll

regsvr32.exe /u C:\folder\folder\name.dll

Per la registrazione dei file * .dll

regsvr32.exe C:\folder\folder\name.dll

2

Parte della confusione riguardante regsvr32 è che su Windows a 64 bit il nome e il percorso non sono cambiati, ma ora registra le DLL a 64 bit. Il regsvr32 a 32 bit esiste in SysWOW64, un nome che sembra rappresentare le applicazioni a 64 bit. Tuttavia il WOW64 nel nome si riferisce a Windows su Windows 64, o più esplicitamente Windows a 32 bit su Windows a 64 bit. Quando la pensi in questo modo, il nome ha senso anche se in questo contesto crea confusione.

Non riesco a trovare la mia fonte originale su un blog MSDN ma è referenziata in questo articolo di Wikipedia http://en.wikipedia.org/wiki/WoW64


1

Ecco come ho risolto questo problema su una macchina Win7 x64:

1 - messaggio di errore:

"CoCreateInstance () non riuscita. Controlla le voci di registro CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3} e assicurati di aver effettuato l'accesso come amministratore"

2 - procedura di correzione:

  • Avvia / digita cmd / RightMouseClicca su cmd.exe e scegli "Esegui come amministratore"
  • digitato: regsvr32 / s C: \ Program Files \ Autodesk \ 3ds Max Design 2015 \ atl.dll regsvr32 / s C: \ Program Files \ Autodesk \ 3ds Max Design 2015 \ MAXComponents.dll
  • riavvia Win 7 e torna di nuovo in attività!

Spero che questo ti aiuti !

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.