ฉันจะลงทะเบียนไฟล์ DLL บน Windows 7 64 บิตได้อย่างไร


101

ฉันได้พยายามใช้รหัสต่อไปนี้:

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

แต่นี่ใช้ไม่ได้สำหรับฉัน ฉันจะลงทะเบียนไฟล์ DLL บน Windows 7 ด้วยโปรเซสเซอร์ 64 บิตได้อย่างไร


เมื่อเห็นคำถามนี้ติดแท็ก "vb.net" ฉันจึงสงสัยว่าทำไมคุณถึงพยายามลงทะเบียน DLL ที่คุณสร้างใน VB.NET เพื่อใช้กับregsvr32DLL ต้องส่งออกฟังก์ชันDllRegisterServerและDllUnregisterServer. ไม่มีการลงทะเบียน DLL ส่วนใหญ่ที่คุณสร้างเลย
Cody Grey

12
คุณหมายถึงอะไรไม่ได้ผลหรือไม่มีประโยชน์? คุณได้รับข้อความแสดงข้อผิดพลาดหรือไม่? มันพูดว่าอะไร?
Cody Gray

คำตอบ:


68

พิมพ์regsvr32 name.dllใน Command Prompt (ดำเนินการในโหมดยกระดับ!) แล้วกด "Enter" โปรดทราบว่าname.dllควรแทนที่ด้วยชื่อของ DLL ที่คุณต้องการลงทะเบียน ตัวอย่างเช่นถ้าคุณต้องการลงทะเบียน iexplore.dll regsvr32 iexplore.dllชนิด


5
regsvr32 เส้นทางของไฟล์. dll พร้อมชื่อไฟล์และนามสกุลแล้วกด Enter
RK Sharma

202

คุณไม่ได้ระบุว่าเป็น dll 32 หรือ 64 บิตและคุณไม่ได้รวมข้อความแสดงข้อผิดพลาด แต่ฉันเดาว่าเป็นปัญหาเดียวกันกับที่อธิบายไว้ในบทความ KB นี้: ข้อความแสดงข้อผิดพลาดเมื่อคุณเรียกใช้ Regsvr32.exe บน Windows 64 บิต

อ้างจากบทความนั้น:

ลักษณะการทำงานนี้เกิดขึ้นเนื่องจากไฟล์ Regsvr32.exe ในโฟลเดอร์ System32 เป็นเวอร์ชัน 64 บิต เมื่อคุณเรียกใช้ Regsvr32 เพื่อลงทะเบียน DLL คุณกำลังใช้เวอร์ชัน 64 บิตตามค่าเริ่มต้น

แนวทางแก้ไขจากบทความนั้น:

เมื่อต้องการแก้ไขปัญหานี้ให้เรียกใช้ Regsvr32.exe จากโฟลเดอร์% SystemRoot% \ Syswow64 ตัวอย่างเช่นพิมพ์คำสั่งต่อไปนี้เพื่อลงทะเบียน DLL: cd \windows\syswow64 regsvr32 c:\filename.dll


13
เหตุใดจึงไม่ใช่คำตอบที่เลือก
Mike Devenney

5
นี่น่าจะเป็นคำตอบที่ถูกต้องจริงๆ ฉันเข้าใจได้ว่าในโพสต์ต้นฉบับของเขาไวยากรณ์ไม่ถูกต้อง แต่ Rajkumar แสดงความคิดเห็นว่าเขาได้รับข้อความแสดงข้อผิดพลาดแม้ว่าจะใช้ไวยากรณ์ที่ถูกต้องก็ตาม การดำเนินการนี้จะใช้สองขั้นตอนในการหาคำตอบที่ถูกต้องสำหรับคนที่ค้นหาแทนที่จะเป็นคำตอบเดียว อันดับแรกให้เลือกคำตอบว่าถูกต้องจากนั้นตามห่วงโซ่ความคิดเห็นลงเอยที่โพสต์นี้
Rob

102

หาก DLL เป็น32บิต:

คัดลอก DLL ไปที่ C: \ Windows \ SysWoW64 \
ในการยกระดับพร้อมรับคำสั่ง:%windir%\SysWoW64\regsvr32.exe %windir%\SysWoW64\namedll.dll

ถ้า DLL คือ64บิต:

คัดลอก DLL ที่ C: \ Windows \ System32 \
ในการยกระดับพร้อมรับคำสั่ง:%windir%\System32\regsvr32.exe %windir%\System32\namedll.dll

ฉันรู้ว่ามันดูผิดทาง แต่นั่นเป็นวิธีที่ได้ผล ดู:

http://support.microsoft.com/kb/249873
ข้อความอ้างอิง: "หมายเหตุในระบบปฏิบัติการ Windows รุ่น 64 บิตมีไฟล์ Regsv32.exe อยู่สองเวอร์ชัน:
เวอร์ชัน 64 บิตคือ% systemroot% \ System32 \ regsvr32.exe
เวอร์ชัน 32 บิตคือ% systemroot% \ SysWoW64 \ regsvr32.exe
"


26
+1 สำหรับ "ฉันรู้ว่ามันดูผิดทาง แต่นั่นเป็นวิธีที่ได้ผล" พร้อมลิงก์ไปยัง support.microsoft.com ... ไม่มีลิงก์ที่ยากที่จะเชื่อ
Trevor Boyd Smith

6
"ใน cmd ที่สูงขึ้น" สำคัญมาก !!
shindigo

4
ฉันไม่คิดว่าเราต้องคัดลอกไปที่โฟลเดอร์ system32 หรือ syswow64 เพียงลงทะเบียนไฟล์ไม่ว่าจะอยู่ที่ใด
Nikos

30

บนระบบ x64 system32 สำหรับ 64 บิตและ syswow64 สำหรับ 32 บิต (ไม่ใช่วิธีอื่นตามที่ระบุไว้ในคำตอบอื่น) WOW (Windows บน Windows) คือระบบย่อย 32 บิตที่ทำงานภายใต้ระบบย่อย 64 บิต)

มันเป็นเรื่องยุ่งยากในการตั้งชื่อและทำหน้าที่เพียงสร้างความสับสน แต่นั่นก็เป็นอย่างนั้น

อีกครั้ง ...

syswow64 คือ 32 บิตไม่ใช่ 64 บิต

system32 คือ 64 บิตไม่ใช่ 32 บิต

มี regsrv32 ในแต่ละไดเร็กทอรีเหล่านี้ หนึ่งคือ 64 บิตและอีกอันคือ 32 บิต เป็นข้อตกลงเดียวกันกับ odbcad32 และ et al. (หากคุณต้องการดูไดรเวอร์ODBC 32 บิตซึ่งจะไม่แสดงขึ้นพร้อมกับ odbcad32 เริ่มต้นใน system32 ซึ่งเป็น 64 บิต)


1
ทำไมมันถึงสำคัญ? regsvr32จะดูแลเกี่ยวกับรายละเอียดในทางทฤษฎีมันจะตรวจจับว่าคุณกำลังลงทะเบียน DLL 32 บิตหรือ 64 บิต: stackoverflow.com/questions/18935163/…
Sk8erPeter

8

เปิดเมนูเริ่มแล้วพิมพ์ cmd ลงในช่องค้นหากด Ctrl + Shift แล้วกด Enter

สิ่งนี้เรียกใช้พรอมต์คำสั่งในโหมดผู้ดูแลระบบ

ตอนนี้พิมพ์: regsvr32 MyComobject.dll


6

ในที่สุดฉันก็พบวิธีแก้ปัญหาเพียงแค่เรียกใช้ CMD ในฐานะผู้ดูแลระบบจากนั้นเขียน

cd \windows\syswow64

จากนั้นเขียนสิ่งนี้

regsvr32 c:\filename.dll

ฉันหวังว่าคำตอบจะช่วยคุณได้


หากคุณได้คัดลอก filename.dll ไปยังโฟลเดอร์ syswow64 แล้วและคุณเปลี่ยนไดเรกทอรีการทำงานเป็น syswow64 ในพรอมต์คำสั่งไม่จำเป็นต้องใช้ "c: \" ใน "regsvr32 c: \ filename.dll" ในระยะสั้น "regsvr32 c: \ filename.dll" ควรอ่าน "regsvr32 filename.dll"
Josh McKearin

6

หาก DLL เป็น 32 บิต:

  1. คัดลอก DLL ไปที่ C: \ Windows \ SysWoW64 \
  2. ใน cmd ที่สูงขึ้น:% windir% \ SysWoW64 \ regsvr32.exe% windir% \ SysWoW64 \ namedll.dll

ถ้า DLL เป็น 64 บิต:

  1. คัดลอก DLL ไปที่ C: \ Windows \ System32 \
  2. ใน cmd ที่สูงขึ้น:% windir% \ System32 \ regsvr32.exe% windir% \ System32 \ namedll.dll

6

ทุกอย่างที่นี่ล้มเหลวเป็นเส้นทางที่ผิด จากนั้นฉันก็จำเคล็ดลับจาก Win95 สมัยก่อนได้ เปิดโฟลเดอร์โปรแกรมที่. dll อยู่เปิด C: / Windows / System32 เลื่อนลงไปที่ regsvr32 แล้วลากและวาง dll จากโฟลเดอร์โปรแกรมไปที่ rgsrver32 บูมเสร็จแล้ว


2
วิธีนี้ใช้งานได้ แต่อาจเป็นปัญหาได้หากคุณต้องการเรียกใช้สิ่งนี้ในฐานะผู้ดูแลระบบ
workabyte

3

การทราบข้อความแสดงข้อผิดพลาดจะค่อนข้างมีค่า มีไว้เพื่อให้ข้อมูลแม้ว่ามันจะไม่สมเหตุสมผลกับคุณก็ตาม เมื่อถูกบังคับให้เดาฉันจะบอกว่า DLL เป็นตัวกรอง DirectX 32 บิต ซึ่งในกรณีนี้ควรเป็นแนวทางปฏิบัติที่เหมาะสม:

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

ต้องรันที่พร้อมท์คำสั่งเพื่อให้ UAC ไม่สามารถหยุดการเข้าถึงรีจิสทรีที่จำเป็นได้ ถามคำถามเพิ่มเติมเกี่ยวกับเรื่องนี้ที่ superuser.com


3

ฉันเพิ่งทดสอบวิธีง่ายๆนี้และทำงานได้อย่างสมบูรณ์ - แต่ฉันใช้บัญชีผู้ดูแลระบบในตัวดังนั้นฉันจึงไม่ต้องข้ามห่วงเพื่อเพิ่มสิทธิ์

ไฟล์แบตช์ต่อไปนี้ช่วยให้ผู้ใช้ไม่จำเป็นต้องย้ายไฟล์เข้า / ออกจากโฟลเดอร์ระบบ นอกจากนี้ยังปล่อยให้ Windows ใช้เวอร์ชันที่เหมาะสมของRegsvr32 .

คำแนะนำ:

  • ในโฟลเดอร์ที่มีไฟล์ไลบรารี ( -.dllหรือ-.ax) ที่คุณต้องการลงทะเบียนให้เปิดไฟล์ข้อความใหม่และวางหนึ่งในกิจวัตรด้านล่าง:

    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
    
  • บันทึกไฟล์ข้อความใหม่ของคุณเป็นไฟล์ batch ( -.bat); จากนั้นเพียงลากและวางไฟล์ของคุณ-.dllหรือวาง-.axที่ด้านบนของไฟล์แบตช์

  • หาก UAC ไม่เปิดโอกาสให้คุณเรียกใช้ไฟล์แบตช์ในฐานะผู้ดูแลระบบคุณอาจต้องยกระดับสิทธิ์ด้วยตนเอง (คำแนะนำสำหรับ Windows 7):

    1. คลิกขวาที่ไฟล์แบตช์
    2. เลือกCreate shortcut;
    3. คลิกขวาที่ทางลัด
    4. เลือกProperties;
    5. คลิกที่Compatibilityแท็บ
    6. ทำเครื่องหมายในช่องที่มีข้อความRun this program as administrator;
    7. ลากแล้วปล่อย-.dllหรือ-.axไฟล์ของคุณที่ด้านบนของทางลัดใหม่แทนไฟล์แบตช์

นั่นแหล่ะ ฉันเลือก COPY แทนที่จะ MOVE ป้องกันความล้มเหลวของความพยายามติดตามผลที่เกี่ยวข้องกับ UAC การลงทะเบียนสำเร็จควรตามด้วยการลบไฟล์ไลบรารี ( -.dll หรือ -.ax) ต้นฉบับ

ไม่ต้องกังวลกับสำเนาที่ส่งไปยังโฟลเดอร์ระบบ ( C:\Windows\System32 หรือ ) โดยการส่งครั้งก่อน - สำเนาC:\Windows\SysWOW64เหล่านี้จะถูกเขียนทับทุกครั้งที่คุณเรียกใช้ไฟล์แบตช์

เว้นแต่คุณจะรันไฟล์แบตช์ผิดซึ่งในกรณีนี้คุณอาจต้องการลบสำเนาที่ทำในโฟลเดอร์ระบบที่ไม่ถูกต้อง ( C:\Windows\System32 หรือ C:\Windows\SysWOW64 )ก่อนที่จะเรียกใช้ไฟล์แบตช์ที่เหมาะสม ... หรือ ...

  • ช่วย Windows เลือกไฟล์ไลบรารีที่เหมาะสมเพื่อลงทะเบียนโดยระบุตำแหน่งไดเร็กทอรีอย่างครบถ้วน

    1. จากไฟล์แบตช์ด้านขวาให้คัดลอกเส้นทางโฟลเดอร์ระบบ
      • ถ้า 64 บิต: C:\Windows\System32
      • ถ้า 32 บิต: C:\Windows\SysWOW64
    2. วางไว้ในบรรทัดถัดไปเพื่อให้นำหน้า %nx1
      • ถ้า 64 บิต: regsvr32 "C:\Windows\System32\%nx1"
      • ถ้า 32 บิต: regsvr32 "C:\Windows\SysWOW64\%nx1"
        • วางเส้นทางภายในเครื่องหมายคำพูด
        • แทรกแบ็กสแลชเพื่อแยกออก%nx1จากเส้นทางโฟลเดอร์ระบบ
      • หรือ ...

  • เรียกใช้ไฟล์แบตช์ปืนลูกซองซึ่งจะ (ตามลำดับ):

    1. ดำเนินการล้างขั้นตอนการลงทะเบียนที่ถูกยกเลิก
      • ย้อนกลับกระบวนการลงทะเบียนใด ๆ ที่เสร็จสมบูรณ์โดยไฟล์ไลบรารี
      • ลบสำเนาของไฟล์ไลบรารีของคุณที่บันทึกไว้ในโฟลเดอร์ระบบใด ๆ
      • หยุดชั่วคราวเพื่อให้คุณสามารถยุติไฟล์แบตช์ ณ จุดนี้ (และเรียกใช้ไฟล์อื่นหากต้องการ)
    2. ลองติดตั้ง 64 บิตบนไฟล์ไลบรารีของคุณ
      • คัดลอกไฟล์ไลบรารีของคุณไปที่C:\Windows\System32;
      • ลงทะเบียนไฟล์ไลบรารีของคุณเป็นกระบวนการ 64 บิต
      • หยุดชั่วคราวเพื่อให้คุณยุติไฟล์แบตช์ ณ จุดนี้
    3. เลิกทำการติดตั้ง 64 บิต
      • ย้อนกลับการลงทะเบียนไฟล์ไลบรารีของคุณเป็นกระบวนการ 64 บิต
      • ลบไฟล์ไลบรารีของคุณจากC:\Windows\System32;
      • หยุดชั่วคราวเพื่อให้คุณสามารถยุติไฟล์แบตช์ ณ จุดนี้ (และเรียกใช้ไฟล์อื่นหากต้องการ)
    4. พยายามติดตั้ง 32 บิตในไฟล์ไลบรารีของคุณ
      • คัดลอกไฟล์ไลบรารีของคุณไปที่ C:\Windows\SystemWOW64
      • ลงทะเบียนไฟล์ไลบรารีของคุณเป็นกระบวนการ 32 บิต
      • หยุดชั่วคราวเพื่อให้คุณยุติไฟล์แบตช์ ณ จุดนี้
    5. ลบสำเนาต้นฉบับของไฟล์ไลบรารีที่ไม่ได้ลงทะเบียน

Run as administratorเป็นสีเทาเมื่อฉันสร้างทางลัดสำหรับไฟล์ bat ฉันเข้าสู่ระบบในฐานะผู้ดูแลระบบ ยังเป็น%nx1หรือ%n1?
Jon Grah

3

มีความแตกต่างใน Windows 7 การเข้าสู่ระบบในฐานะผู้ดูแลระบบไม่ได้ให้สิทธิ์เช่นเดียวกับเมื่อเรียกใช้โปรแกรมในฐานะผู้ดูแลระบบ

ไปที่ Start - All Programs - Accesories คลิกขวาที่หน้าต่าง Command และเลือก "Run as administrator" ตอนนี้ลงทะเบียน dll ตามปกติผ่าน: regsrvr32 xxx.dll


3

และในขณะที่ทำสิ่งนี้หากคุณได้รับรหัสข้อผิดพลาด 0x80040201 ให้ลองวิธีแก้ปัญหาในDllRegisterServer ล้มเหลวด้วยรหัสข้อผิดพลาด 0x80040201แต่ตรวจสอบให้แน่ใจว่าคุณเปิดพรอมต์คำสั่งเป็นRun as Administratorเรียกใช้ในฐานะผู้ดูแลระบบ


3

คุณต้องเรียกใช้ไฟล์ cmd.exeในc:\windows\system32\ by administrator

คำสั่ง: สำหรับการยกเลิกการลงทะเบียนไฟล์ * .dll

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

สำหรับการลงทะเบียนไฟล์ * .dll

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

2

ส่วนหนึ่งของความสับสนเกี่ยวกับ regsvr32 คือในหน้าต่าง 64 บิตชื่อและเส้นทางไม่ได้เปลี่ยนไป แต่ตอนนี้ลงทะเบียน DLL 64 บิตแล้ว regsvr32 32 บิตมีอยู่ใน SysWOW64 ซึ่งเป็นชื่อที่แสดงถึงแอปพลิเคชัน 64 บิต อย่างไรก็ตาม WOW64 ในชื่อหมายถึง Windows บน Windows 64 หรือมากกว่า Windows 32 บิตที่ชัดเจนบน Windows 64 บิต เมื่อคุณคิดอย่างนี้ชื่อก็เข้าท่าแม้ว่าจะสับสนในบริบทนี้ก็ตาม

ฉันไม่พบแหล่งข้อมูลดั้งเดิมของฉันในบล็อก MSDN แต่มีการอ้างอิงในบทความ Wikipedia นี้http://en.wikipedia.org/wiki/WoW64


1

นี่คือวิธีที่ฉันแก้ไขปัญหานี้ในเครื่อง Win7 x64:

1 - ข้อความแสดงข้อผิดพลาด:

"CoCreateInstance () ล้มเหลวโปรดตรวจสอบรายการรีจิสทรีของคุณ CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3} และตรวจสอบว่าคุณได้เข้าสู่ระบบในฐานะผู้ดูแลระบบ"

2 - ขั้นตอนการแก้ไข:

  • เริ่ม / พิมพ์ cmd / RightMouseClick บน cmd.exe แล้วเลือก "Run as Administrator"
  • พิมพ์: regsvr32 / s C: \ Program Files \ Autodesk \ 3ds Max Design 2015 \ atl.dll regsvr32 / s C: \ Program Files \ Autodesk \ 3ds Max Design 2015 \ MAXComponents.dll
  • รีสตาร์ท Win 7 และกลับมาทำธุรกิจอีกครั้ง!

หวังว่านี่จะช่วยได้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.