(Post 12/11/2010) Do các phần mềm thường sử
dụng rất nhiều ActiveX component nhưng không bắt lỗi để cung cấp thông
tin chính xác về “nơi xảy ra lỗi” nên “429” trở thành vấn đề khó xử lý.
“Run-time error '429': ActiveX component
can't create object” là một lỗi khá phổ biến, dễ hiểu nhưng
lại rất khó khắc phục. Dễ hiểu vì lỗi xảy ra khi một ActiveX component
không được đăng ký đúng, chỉ cần đăng ký lại bằng lệnh: regsvr32 [ActiveX
component path]. Tuy nhiên, do các phần mềm thường sử dụng rất nhiều ActiveX
component nhưng không bắt lỗi để cung cấp thông tin chính xác về “nơi
xảy ra lỗi” nên “429” trở thành vấn đề khó xử lý.
Lập
trình viên có thể bắt lỗi và thông báo cụ thể để giúp đội hỗ trợ cùng
người dùng giải quyết nhanh chóng mọi sự cố kiểu này. Cách đơn giản nhất
là dùng biến Erl kết hợp với việc đánh số dòng lệnh để thông báo dòng
lệnh gây lỗi. Cẩn thận hơn, chúng ta có thể dùng mệnh đề On Error Resume
Next rồi kiểm tra đối tượng sau khi tạo theo mẫu sau:
On Error Resume Next
msgbox "tObjName: " & tObjName
Set cobjReportExt = CreateObject(tObjName)
msgbox "After CreateObject"
Screen.MousePointer = vbHourglass
If Not (cobjReportExt Is Nothing) Then
fileName = cobjReportExt.ReportName(RptType)
else
msgbox "cObjReportExt is Nothing"
end if
Nhưng nếu phần mềm mà bạn sử dụng không đưa ra được thông
báo cụ thể thì cũng đừng nản chí. Với người dùng cuối không thạo máy tính,
việc đầu tiên và đơn giản nhất là ghi nhớ thao tác thực hiện ngay trước
khi phát sinh lỗi để dễ tìm kiếm giải pháp hoặc giúp nhà cung cấp có thể
nhanh chóng khoanh vùng lỗi. Nếu bạn không liên lạc được với nhà cung
cấp phần mềm hay họ chưa thể giúp bạn ngay, hãy thử (hoặc nhờ người thạo
máy tính giúp thử) một số cách sau đây:
1. Quét và chỉnh sửa registry với các công cụ như
RegClean, đôi khi nguyên nhân của lỗi “429” nằm ở registry và có thể
khắc phục bằng cách này.
FPT APTECH
cung cấp cho các bạn đam mê học tin học, học công nghệ thông
tin chuyên sâu về học lập trình cơ hội được đào tạo Công Nghệ
Thông Tin trong môi trường tiêu chuẩn chất lượng quốc tế ISO9001.
Học
CNTT - Học Aptech - Học tại FPT |
|
2. Xác định thư viện bị lỗi bằng cách dùng tiện ích
ListDLLs của SysInternal để liệt kê và so sánh các thư viện được nạp
trên máy có lỗi và các máy không bị lỗi.
3. Dùng tiện ích miến phí Process Monitor (cho Windows
2000 SP4, Windows XP SP2, Windows Server 2003 SP1 và Windows Vista)
hoặc phiên bản cũ của nó là Regmon để theo dõi việc truy cập registry
khi ứng dụng đang chạy. Trước hết, khởi động Process Monitor và nhấn
nút lệnh để nó ghi lại các sự kiện diễn ra với registry.
Sau đó chạy ứng dụng cần theo dõi cho đến khi nó sinh lỗi “429” rồi
quay lại Process Monitor lọc các thao tác do ứng dụng của bạn thực hiện
(nhấn Ctl+L để gọi trình đơn Filter->Filter, đổi mục Architecture
thành Process Name, gõ tên ứng dụng của bạn trong ô thứ 2 và chọn Include
trong mục thứ 3 rồi nhấn nút Add, sau đó nhấn nút Apply, cuối cùng chọn
trình đơn File->Save lưu các "events displayed using the current
filter").
Với thông tin thu được, hãy tìm kiếm những đoạn mà thao tác “OpenKey”
thất bại. Thông thường, nó liên quan tới các khoá HKCR\CLSID\NN..NN\InprocServer32
và HKCR\TypeLib\NN..NN (chuỗi ‘NN..NN’ là class sid của COM object bị
thiếu). Khi đó, phần việc còn lại rất đơn giản: định vị class sid đó
trong registry của máy tính đang chạy tốt để tìm ra đường dẫn đến cấu
phần bị thiếu rồi sao chép (nếu cần) và dùng lệnh regsvr32 để đăng ký.
Trong một số trường hợp đặc biệt, nguyên nhân có thể là thiếu quyền
truy cập registry.
Khi đó, người dùng sẽ thấy lỗi ACCESS DENIED ở thao tác đọc registry
trong log do Process Monitor ghi lại. Với tình huống này, người dùng
cần đăng nhập với tài khoản có quyền quản trị để phân quyền bổ sung
cho tài khoản dùng để chạy ứng dụng.
Nguyễn Anh Tuấn
(theo PC World VN)
Tin liên quan:
|