Friday, March 28, 2008

Regsvr32 usage and error messages

การใช้เครื่องมือ Regsvr32 และข้อผิดพลาด
เมื่อผู้ใช้ Windows ต้องการแก้ไขปัญหาบางอย่างใน Windows หรือ Internet Explorer หรือโปรแกรมอื่นๆ ผู้ใช้ Windows XP สามารถใช้เครื่องมือ Regsvr32 (Regsvr32.exe) เพื่อลงทะเบียนและยกเลิกการลงทะเบียนคอนโทรล OLE เช่น DLL หรือไฟล์ ActiveX Controls (OCX) ต่างๆ ที่ลงทะเบียนได้ด้วยตนเอง

ในกรณีการลงทะเบียนคอนโทรลไม่สำเร็จหรือว่าต้องการข้อมูลเพิ่มเติมสามารถอ่านรายละเอียดได้จากเว็บไซต์ KB140346

เครื่องมือ Regsvr32.exe นั้นจะให้มากับ Internet Explorer 3.0 หรือเวอร์ชันใหม่กว่า โดยบนระบบปฏิบัติการ Windows NT, Windows XP และ Windows Vista นั้นจะติดตั้งในโฟลเดอร์ System32

การใช้งานเครื่องมือ Regsvr32.exe
เครื่องมือ Regsvr32.exe มีอ็อปชันดังนี้

Regsvr32 [/u] [/n] [/i[:cmdline]] dllname

/u - ยกเลิกการลงทะเบียนเซิร์ฟเวอร์
/i - เรียกใช้ DllInstall ที่ส่งผ่านเป็นอ็อปชันเพิ่มเติมของ [cmdline] เมื่อใช้ร่วมกับ /u จะเรียกใช้การยกเลิกการติดตั้ง dll
/n - ไม่เรียกใช้ DllRegisterServer ตัวเลือกนี้ต้องใช้คู่กับ /i
/s – Silent ทำงานโดยไม่แสดงข้อความ (มีเฉพาะใน Windows XP และ Windows Vista)

เมื่อทำการรันคำสั่ง Regsvr32.exe จะพยายามโหลดคอมโพเนนต์และเรียกใช้ฟังก์ชัน DLLSelfRegister หากความพยายามนี้สำเร็จ Regsvr32.exe จะแสดงไดอะล็อกบ็อกซ์แจ้งให้ทราบว่าสำเร็จ หากความพยายามนี้ไม่สำเร็จ Regsvr32.exe จะแสดงข้อความแสดงข้อผิดพลาด ซึ่งอาจมีรหัสข้อผิดพลาด Win32 ซึ่งสามารถข้อมูลเพิ่มเติมสามารถอ่านรายละเอียดได้จากเว็บไซต์ http://support.microsoft.com/kb/193625/ สำหรับรหัสข้อผิดพลาดของ WinInet (12001 ถึง 12156)

ตัวอย่าง: การลงทะเบียนคอนโทรล ActiveX ชื่อ Sample.ocx ด้วยตนเอง ให้พิมพ์คำสั่งต่อไปนี้ที่คอมมานด์พร้อมท์
c:\regsvr32.exe sample.ocx

ข้อความแสดงข้อผิดพลาดของ Regsvr32.exe ใน Windows Vista
รายชื่อต่อไปนี้มีข้อความแสดงข้อผิดพลาดของ RegSvr32 และที่อาจเป็นไปได้

- The command-flag ""%1"" is not valid. Please review the command usage and try again.
สาเหตุ: มีการส่งต่ออ็อปชันร่วมกันไม่ถูกต้องในคอมมานด์ไลน์ไปยัง regsvr32.exe

- This command is only valid if a Microsoft Visual Studio OLE Custom Control project is opened.
สาเหตุ: Regsvr32.exe ถูกเรียกโดย Visual Studio แต่ไม่มีโมดูลที่ระบุในคอมมานด์ไลน์

- To register a module, you must provide a binary name.
สาเหตุ: Regsvr32.exe ถูกเรียกโดยไม่ได้ระบุโมดูลต่างๆ ในคอมมานด์ไลน์.

- The command OleInitialize failed to run. Your computer might be low on memory. Close any open programs and then try again.
สาเหตุ: Regsvr32 ต้องเตรียมใช้งานไลบรารี COM ก่อนที่จะสามารถเรียกใช้ฟังก์ชันต่างๆ ของไลบรารี COM ได้และยกเลิกไบบรารีเมื่อปิดระบบ ข้อความแสดงข้อผิดพลาดเหล่านี้เกิดขึ้น หากความพยายามในการเตรียมใช้งานหรือ ยกเลิกการเตรียมใช้งานไลบรารี COM ไม่สำเร็จ

- The module ""%1"" failed to load.\n\n Make sure the binary is stored at the specified path or debug it to check for problems with the binary or dependent .DLL files.\n\n%2.
สาเหตุ: เกิดข้อผิดพลาดในการโหลดโมดูลที่ถูกระบุในคอมมานด์ไลน์ ข้อความผิดพลาดปรากฏเป็นส่วนหนึ่งของข้อความ

- The module ""%1"" was loaded but the entry-point %2 was not found.\n\nMake sure that ""%1"" is a valid DLL or OCX file and then try again
สาเหตุ: Regsvr32.exe ไม่พบจุดเข้าใช้งานที่ต้องการในโมดูลที่ระบุในคอมมานด์ไลน์ ปัญหานี้อาจเกิดขึ้นได้หากไม่ได้ส่งออกจุดเข้าใช้งานจากโมดูลอย่างเหมาะสม หรือหากโมดูลนี้ไม่ใช่แฟ้ม .DLL หรือ .OCX

- The module ""%1"" was loaded but the call to %2 failed with error code %3.\n\nFor more information about this problem, search online using the error code as a search term.
สาเหตุ: เกิดข้อผิดพลาดเมื่อ regsvr32.exe เรียกจุดเข้าใช้งานในโมดูลที่ระบุอยู่ในคอมมานด์ไลน์ รหัสข้อผิดพลาดปรากฏเป็นส่วนหนึ่งของข้อความ

- The module ""%1"" may not compatible with the version of Windows that you're running. Check if the module is compatible with an x86 (32-bit) or x64 (64-bit) version of regsvr32.exe.
สาเหตุ: ข้อผิดพลาดนี้อาจเกิดขึ้นได้ ตัวอย่างเช่น หากเรียกใช้ regsvr32.exe บนเครื่องรุ่น x86 และโมดูลที่ระบุในคอมมานด์ไลน์เป็นโมดูลแบบ 64-บิต

ข้อความแสดงข้อผิดพลาดของ Regsvr32.exe ในวินโดวส์เวอร์ชันก่อน Windows Vista
รายชื่อต่อไปนี้มีข้อความแสดงข้อผิดพลาด RegSvr32 และสาเหตุที่อาจเป็นไปได้
- Unrecognized flag: /invalid_flag
สาเหตุ: พิมพ์สถานะหรือสวิตช์ร่วมกันไม่ถูกต้อง

- No DLL name specified.
สาเหตุ: ไม่ได้พิมพ์ชื่อแฟ้ม .dll

- Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
สาเหตุ: Dllname ไม่ใช่แฟ้ม .dll หรือ .ocx ตัวอย่างเช่น การพิมพ์ regsvr32 wjview.exe ทำให้เกิดข้อความแสดงข้อผิดพลาดนี้

- Dllname is not an executable file and no registration helper is registered for this file type.
สาเหตุ: Dllname ไม่ใช่แฟ้มที่เรียกใช้งานได้ (.exe, .dll หรือ .ocx) ตัวอย่างเช่น การพิมพ์ regsvr32 autoexec.bat ทำให้เกิดข้อความแสดงข้อผิดพลาดนี้

- Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
สาเหตุ: Dllname ไม่ถูกส่งออกหรือมี Dllname รุ่นที่เสียหายในหน่วยความจำ ให้ลองใช้ Pview เพื่อตรวจหาแฟ้มแล้วลบแฟ้มนั้นทิ้ง

- Dllname is not self-registerable or a corrupted version is in memory.
สาเหตุ: เช่น การพิมพ์ regsvr32 icwdial.dll ทำให้เกิดข้อความแสดงข้อผิดพลาดนี้ เนื่องจากแฟ้ม Icwdial.dll ไม่สามารถลงทะเบียนได้เอง หากสงสัยว่ามีแฟ้ม Dllname ที่เสียหายในหน่วยความจำ ให้ลองเริ่มระบบคอมพิวเตอร์ใหม่หรือลองแตกแฟ้มรุ่นเดิมใหม่อีกครั้ง

- OleInitialize failed (หรือ OleUninitialize failed).
สาเหตุ: Regsvr32 ต้องเตรียมใช้งานไลบรารี COM ก่อนที่จะสามารถเรียกใช้ฟังก์ชันต่างๆ ของไลบรารี COM ได้และยกเลิกไลบรารีเมื่อปิดระบบ ข้อความแสดงข้อผิดพลาดเหล่านี้เกิดขึ้นหากความพยายามในการเตรียมใช้งานหรือ ยกเลิกการเตรียมใช้งานไลบรารี COM ไม่สำเร็จ เช่น แฟ้ม Ole32.dll อาจเสียหายหรือเป็นรุ่นที่ไม่ถูกต้อง

- LoadLibrary("Dllname") failed. GetlastError returns 0x00000485
สาเหตุ: จาก Winerror.h, 0x00000485 = 1157 (ERROR_DLL_NOT_FOUND) ซึ่งหมายความว่า "ไม่พบแฟ้มไลบรารีที่ต้องการเพื่อใช้แอปพลิเคชันนี้" เช่น การพิมพ์ regsvr32 missing.dll ทำให้เกิดข้อความแสดงข้อผิดพลาดนี้ เนื่องจากไม่พบแฟ้ม Missing.dll

- LoadLibrary("Dllname") failed. GetLastError returns 0x00000002
สาเหตุ: จาก Winerror.h, 0x00000002 = 2 (ERROR_FILE_NOT_FOUND) ซึ่งหมายความว่า "ระบบไม่พบแฟ้มที่ระบุ" หรือไม่พบแฟ้ม DLL ตัวอย่างเช่น การพิมพ์ regsvr32 icwdial.dll โดย Tapi32.dll (ที่อ้างอิง) สูญหายไป จะทำให้เกิดข้อความแสดงข้อผิดพลาดนี้

- LoadLibrary("dskmaint.dll") failed. GetLastError returns 0x000001f
สาเหตุ: จาก Winerror.h, 0x000001f = 31 (ERROR_GEN_FAILURE) ซึ่งหมายความว่า "อุปกรณ์ที่เชื่อมต่ออยู่กับระบบไม่ทำงาน" ลักษณะการทำงานนี้อาจเกิดขึ้นได้หากคุณพยายามลงทะเบียนแฟ้ม .dll ของ Win16 ตัวอย่างเช่น การพิมพ์ regsvr32 dskmaint.dll จะทำให้เกิดข้อความแสดงข้อผิดพลาดนี้

- DllRegisterServer (or DllUnregisterServer)in Dllname failed. Return code was: string
สาเหตุ: ค้นหา Winerror.h เพื่อหา สตริงนั้น

บทความโดย: Thai Windows Administrator Blog

ที่มา
Explanation of Regsvr32 usage and error messages

Copyright © 2008 TWA Blog. All Rights Reserved.

No comments :