ฉันได้พยายามใช้รหัสต่อไปนี้:
cd c:\windows\system32
regsvr32.exe dllname.ax
แต่นี่ใช้ไม่ได้สำหรับฉัน ฉันจะลงทะเบียนไฟล์ DLL บน Windows 7 ด้วยโปรเซสเซอร์ 64 บิตได้อย่างไร
ฉันได้พยายามใช้รหัสต่อไปนี้:
cd c:\windows\system32
regsvr32.exe dllname.ax
แต่นี่ใช้ไม่ได้สำหรับฉัน ฉันจะลงทะเบียนไฟล์ DLL บน Windows 7 ด้วยโปรเซสเซอร์ 64 บิตได้อย่างไร
คำตอบ:
พิมพ์regsvr32 name.dll
ใน Command Prompt (ดำเนินการในโหมดยกระดับ!) แล้วกด "Enter" โปรดทราบว่าname.dll
ควรแทนที่ด้วยชื่อของ DLL ที่คุณต้องการลงทะเบียน ตัวอย่างเช่นถ้าคุณต้องการลงทะเบียน iexplore.dll regsvr32 iexplore.dll
ชนิด
regsvr32
เส้นทางของไฟล์. dll พร้อมชื่อไฟล์และนามสกุลแล้วกด Enter
คุณไม่ได้ระบุว่าเป็น 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
หาก 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
"
บนระบบ 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 บิต)
regsvr32
จะดูแลเกี่ยวกับรายละเอียดในทางทฤษฎีมันจะตรวจจับว่าคุณกำลังลงทะเบียน DLL 32 บิตหรือ 64 บิต: stackoverflow.com/questions/18935163/…
เปิดเมนูเริ่มแล้วพิมพ์ cmd ลงในช่องค้นหากด Ctrl + Shift แล้วกด Enter
สิ่งนี้เรียกใช้พรอมต์คำสั่งในโหมดผู้ดูแลระบบ
ตอนนี้พิมพ์: regsvr32 MyComobject.dll
ในที่สุดฉันก็พบวิธีแก้ปัญหาเพียงแค่เรียกใช้ CMD ในฐานะผู้ดูแลระบบจากนั้นเขียน
cd \windows\syswow64
จากนั้นเขียนสิ่งนี้
regsvr32 c:\filename.dll
ฉันหวังว่าคำตอบจะช่วยคุณได้
หาก DLL เป็น 32 บิต:
ถ้า DLL เป็น 64 บิต:
ทุกอย่างที่นี่ล้มเหลวเป็นเส้นทางที่ผิด จากนั้นฉันก็จำเคล็ดลับจาก Win95 สมัยก่อนได้ เปิดโฟลเดอร์โปรแกรมที่. dll อยู่เปิด C: / Windows / System32 เลื่อนลงไปที่ regsvr32 แล้วลากและวาง dll จากโฟลเดอร์โปรแกรมไปที่ rgsrver32 บูมเสร็จแล้ว
การทราบข้อความแสดงข้อผิดพลาดจะค่อนข้างมีค่า มีไว้เพื่อให้ข้อมูลแม้ว่ามันจะไม่สมเหตุสมผลกับคุณก็ตาม เมื่อถูกบังคับให้เดาฉันจะบอกว่า DLL เป็นตัวกรอง DirectX 32 บิต ซึ่งในกรณีนี้ควรเป็นแนวทางปฏิบัติที่เหมาะสม:
cd c:\windows\syswow64
move ..\system32\dllname.ax .
regsvr32.exe dllname.ax
ต้องรันที่พร้อมท์คำสั่งเพื่อให้ UAC ไม่สามารถหยุดการเข้าถึงรีจิสทรีที่จำเป็นได้ ถามคำถามเพิ่มเติมเกี่ยวกับเรื่องนี้ที่ superuser.com
ฉันเพิ่งทดสอบวิธีง่ายๆนี้และทำงานได้อย่างสมบูรณ์ - แต่ฉันใช้บัญชีผู้ดูแลระบบในตัวดังนั้นฉันจึงไม่ต้องข้ามห่วงเพื่อเพิ่มสิทธิ์
ไฟล์แบตช์ต่อไปนี้ช่วยให้ผู้ใช้ไม่จำเป็นต้องย้ายไฟล์เข้า / ออกจากโฟลเดอร์ระบบ นอกจากนี้ยังปล่อยให้ 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):
Create shortcut
;Properties
;Compatibility
แท็บRun this program as administrator
;-.dll
หรือ-.ax
ไฟล์ของคุณที่ด้านบนของทางลัดใหม่แทนไฟล์แบตช์นั่นแหล่ะ ฉันเลือก COPY
แทนที่จะ MOVE
ป้องกันความล้มเหลวของความพยายามติดตามผลที่เกี่ยวข้องกับ UAC การลงทะเบียนสำเร็จควรตามด้วยการลบไฟล์ไลบรารี ( -.dll
หรือ -.ax
) ต้นฉบับ
ไม่ต้องกังวลกับสำเนาที่ส่งไปยังโฟลเดอร์ระบบ ( C:\Windows\System32
หรือ ) โดยการส่งครั้งก่อน - สำเนาC:\Windows\SysWOW64
เหล่านี้จะถูกเขียนทับทุกครั้งที่คุณเรียกใช้ไฟล์แบตช์
เว้นแต่คุณจะรันไฟล์แบตช์ผิดซึ่งในกรณีนี้คุณอาจต้องการลบสำเนาที่ทำในโฟลเดอร์ระบบที่ไม่ถูกต้อง ( C:\Windows\System32
หรือ C:\Windows\SysWOW64
)ก่อนที่จะเรียกใช้ไฟล์แบตช์ที่เหมาะสม ... หรือ ...
ช่วย Windows เลือกไฟล์ไลบรารีที่เหมาะสมเพื่อลงทะเบียนโดยระบุตำแหน่งไดเร็กทอรีอย่างครบถ้วน
C:\Windows\System32
C:\Windows\SysWOW64
%nx1
regsvr32 "C:\Windows\System32\%nx1"
regsvr32 "C:\Windows\SysWOW64\%nx1"
%nx1
จากเส้นทางโฟลเดอร์ระบบเรียกใช้ไฟล์แบตช์ปืนลูกซองซึ่งจะ (ตามลำดับ):
C:\Windows\System32
;C:\Windows\System32
;C:\Windows\SystemWOW64
Run as administrator
เป็นสีเทาเมื่อฉันสร้างทางลัดสำหรับไฟล์ bat ฉันเข้าสู่ระบบในฐานะผู้ดูแลระบบ ยังเป็น%nx1
หรือ%n1
?
มีความแตกต่างใน Windows 7 การเข้าสู่ระบบในฐานะผู้ดูแลระบบไม่ได้ให้สิทธิ์เช่นเดียวกับเมื่อเรียกใช้โปรแกรมในฐานะผู้ดูแลระบบ
ไปที่ Start - All Programs - Accesories คลิกขวาที่หน้าต่าง Command และเลือก "Run as administrator" ตอนนี้ลงทะเบียน dll ตามปกติผ่าน: regsrvr32 xxx.dll
และในขณะที่ทำสิ่งนี้หากคุณได้รับรหัสข้อผิดพลาด 0x80040201 ให้ลองวิธีแก้ปัญหาในDllRegisterServer ล้มเหลวด้วยรหัสข้อผิดพลาด 0x80040201แต่ตรวจสอบให้แน่ใจว่าคุณเปิดพรอมต์คำสั่งเป็นRun as Administratorเรียกใช้ในฐานะผู้ดูแลระบบ
คุณต้องเรียกใช้ไฟล์ cmd.exe
ในc:\windows\system32\ by administrator
คำสั่ง: สำหรับการยกเลิกการลงทะเบียนไฟล์ * .dll
regsvr32.exe /u C:\folder\folder\name.dll
สำหรับการลงทะเบียนไฟล์ * .dll
regsvr32.exe C:\folder\folder\name.dll
ส่วนหนึ่งของความสับสนเกี่ยวกับ regsvr32 คือในหน้าต่าง 64 บิตชื่อและเส้นทางไม่ได้เปลี่ยนไป แต่ตอนนี้ลงทะเบียน DLL 64 บิตแล้ว regsvr32 32 บิตมีอยู่ใน SysWOW64 ซึ่งเป็นชื่อที่แสดงถึงแอปพลิเคชัน 64 บิต อย่างไรก็ตาม WOW64 ในชื่อหมายถึง Windows บน Windows 64 หรือมากกว่า Windows 32 บิตที่ชัดเจนบน Windows 64 บิต เมื่อคุณคิดอย่างนี้ชื่อก็เข้าท่าแม้ว่าจะสับสนในบริบทนี้ก็ตาม
ฉันไม่พบแหล่งข้อมูลดั้งเดิมของฉันในบล็อก MSDN แต่มีการอ้างอิงในบทความ Wikipedia นี้http://en.wikipedia.org/wiki/WoW64
นี่คือวิธีที่ฉันแก้ไขปัญหานี้ในเครื่อง Win7 x64:
"CoCreateInstance () ล้มเหลวโปรดตรวจสอบรายการรีจิสทรีของคุณ CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3} และตรวจสอบว่าคุณได้เข้าสู่ระบบในฐานะผู้ดูแลระบบ"
หวังว่านี่จะช่วยได้!
regsvr32
DLL ต้องส่งออกฟังก์ชันDllRegisterServer
และDllUnregisterServer
. ไม่มีการลงทะเบียน DLL ส่วนใหญ่ที่คุณสร้างเลย