ฉันจะรู้ได้อย่างไรว่าลงทะเบียน DLL แล้ว?


28

เมื่อคุณลงทะเบียน DLL ในเครื่องเก่า (Windows XP) regsrv จะบอกเสมอว่าการลงทะเบียนนั้นทำได้สำเร็จ สิ่งนี้เกิดขึ้นแม้ว่าผู้ใช้จะไม่ได้รับอนุญาตให้ลงทะเบียน

ด้วยชื่อของ dll มีคำสั่งที่ฉันสามารถเรียกใช้ที่บรรทัดคำสั่งเพื่อตรวจสอบว่ามีการติดตั้ง DLL หรือไม่

คำตอบ:


22

ฉันพบลิงค์นี้: ฉันจะรู้ได้อย่างไรว่าลงทะเบียน DLL แล้ว? :

เนื่องจากการลงทะเบียน DLL สามารถรวมการดำเนินการตามอำเภอใจได้ไม่มีวิธีการทั่วไปในการพิจารณาว่าการลงทะเบียนเกิดขึ้นสำหรับ DLL โดยพลการหรือไม่

เมื่อต้องการตรวจสอบว่าลงทะเบียน DLL แล้วคุณจำเป็นต้องมีความรู้เฉพาะโดเมน ถ้าคุณรู้ว่า DLL ลงทะเบียนวัตถุ COM ด้วย CLSID เฉพาะคุณสามารถตรวจสอบว่า CLSID นั้นลงทะเบียนแน่นอน

ตกลงมันเป็นไปไม่ได้ แต่ DLLs มักจะลงทะเบียนตัวเองเพื่อสร้างรายการในการลงทะเบียน วิธีแก้ปัญหาคือ:

  1. ก่อนอื่นคุณต้องค้นหา COM GUID ของ DLL หากคุณมีเครื่องหนึ่งเครื่องที่ลงทะเบียนไว้แล้วคุณสามารถ:
    1. เปิด regedit และค้นหาชื่อไฟล์ DLL ของคุณ
    2. หากมีการลงทะเบียนคุณจะพบชื่อไฟล์ภายใต้คีย์ที่อยู่ภายใต้ TypeLib กุญแจจะมีลักษณะดังนี้: {9F3DBFEE-FD77-4774-868B-65F75E7DB7C2}
  2. ตอนนี้คุณรู้ DLL GUID แล้วคุณสามารถค้นหาด้วยคำสั่งนี้ใน DOS prompt: reg query HKCR\CLSID | find /i "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

คำตอบที่ดีกว่าจะช่วยให้ฉันค้นหา GUID โดยตรงจากไฟล์ก่อนที่จะลงทะเบียน อย่างน้อยที่สุดคุณสามารถสร้างสคริปต์เพื่อติดตั้งและตรวจสอบว่าติดตั้งสำเร็จหรือไม่


4
คุณไม่จำเป็นต้องรู้ GUID ล่วงหน้า วิธีที่ง่ายกว่าคือการค้นหา Registry สำหรับชื่อไฟล์ DLL : หากชื่อนั้นอยู่ในรายการภายใต้คีย์ GUID เหล่านั้นดังนั้นใช่แล้ว DLL นั้นได้รับการลงทะเบียนแล้ว
Massimo

@ Massimo: แต่ฉันจะค้นหาได้อย่างไร คีย์ไหน? มันสามารถแสดงอย่างผิดพลาดในประวัติเชลล์ (เช่นพยายามลงทะเบียนโดยไม่ต้องเป็นผู้ดูแลระบบ)
neves

ภายใต้ HKCR เห็นได้ชัด :) หรืออย่างน้อยที่สุดภายใต้ HKLM สิ่งที่ผู้ใช้ระบุ (เช่นประวัติเชลล์) อยู่ภายใต้ HKCU
Massimo

@ Massimo: ถ้าคุณใส่คำตอบที่นี่ด้วยคำสั่ง shell เพื่อค้นหาคำตอบฉันจะทำเครื่องหมายเป็นคำตอบที่ถูกต้อง
neves

เหมือนกับของคุณ: ใช้REG QUERYเพื่อค้นหาชื่อไฟล์ DLL
Massimo

13

ฉันต้องการตรวจสอบว่า DLL ที่มีชื่อเฉพาะลงทะเบียนและฉันใช้คำสั่งนี้ใน BAT ของฉัน:

reg query HKLM\SOFTWARE\Classes /s /f whatever.dll
if errorlevel 1 goto DLL_MISSING

หากมีข้อผิดพลาดระดับส่งการควบคุมไปยังฉลากเมื่อreg queryใดก็ไม่พบ คุณอาจต้องเปลี่ยนส่วนของรีจิสตรีที่คุณค้นหา (ในกรณีของฉันHKLM'...พา ธ ที่เฉพาะเจาะจงยิ่งเร็วขึ้นมิฉะนั้นจะใช้เวลานานมาก)

สามารถประมวลผลเอาต์พุตได้หากจำเป็นสามารถรับ GUID สำหรับรายการได้ แต่อยู่นอกขอบเขตของคำสั่ง reg แบบสอบถาม


0

ในการค้นหารายการรีจิสตรี (และวัตถุ COM ทางเลือก) สำหรับ DLL จากบรรทัดคำสั่งการรวมกันของคำตอบโดย @ virgo47 และ @neves ทำงานได้ดีที่สุดสำหรับฉัน

  1. ค้นหารายการรีจิสทรีที่มีชื่อ DLL รายการเหล่านี้มักจะใช้ GUID เป็นกุญแจสำคัญ

    reg แบบสอบถาม HKLM \ SOFTWARE \ Classes / s / f Anything.dll

  2. (ไม่บังคับ)ค้นหาวัตถุ COM ที่ลงทะเบียนกับ GUID เหล่านี้แล้ว (การใช้/s /f "{GUID}"ควรจะเร็วกว่า| findstr /i "{GUID}"และ| find /i "{GUID}"ดูเหมือนจะเป็นตัวพิมพ์ผิด (แต่ฉันยังไม่สามารถเขียนความคิดเห็นใน Serverfault ได้))

    reg แบบสอบถาม HKCR \ CLSID / s / f "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

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