2009-03-18 15 views
28

Tôi vừa cài đặt một ứng dụng của bên thứ ba trên Windows Server 2008 máy chủ và tôi nhận được thông báothành phần ActiveX không thể tạo đối tượng

ActiveX Component can't create object

khi tôi cố gắng truy cập bằng một CreateObject trong VBScript.

Nó chắc chắn được cài đặt và tồn tại trong "Chương trình và tính năng". Có ai có một danh sách những thứ mà tôi có thể kiểm tra để tìm ra những gì đang xảy ra không?

bây giờ tôi đã cố gắng đăng ký DLL sử dụng regsvr32.exe /i bob.dll như đề nghị nhưng tôi nhận được lỗi này:

The Module "Bob.dll" was loaded but the entry-point DllRegisterServer was not found.

Make sure that "Bob.dll" is valid DLL or OCX file and then try again.

tôi nên lưu ý rằng đây là một ứng dụng 32-bit trên một máy 64-bit tại điểm này . Nó cũng hoạt động tốt trên máy tính của tôi mà là Windows XP 32-bit.

+0

Nhanh chóng ... Bạn có chắc chắn bạn có đúng progid không? –

Trả lời

38

Hóa ra là ứng dụng này hoạt động dưới VBScript, tôi phải làm hai việc.

  1. Chạy RegAsm.exe để đăng ký các tệp DLL.
  2. Chạy C: \ Windows \ SysWOW64 \ cscript.exe để chạy VBScript của tôi.

Cảm ơn sự giúp đỡ của bạn.

CŨNG nếu những không có tác dụng, hãy kiểm tra các câu trả lời khác here về tạo điều kiện cho các ứng dụng 32-bit.

+2

Cảm ơn bạn vì điều này! –

+3

Rất tốt! Tôi đã đập đầu vào cái này trong 20 phút cuối. Tôi hơi thất vọng vì thiếu thông báo lỗi hữu ích từ trình thông dịch 32 bit. – Eric

+0

@JeroenLandheer, làm cho nó giống như 2 giờ: P – Carlos

9

Ứng dụng đang cố gắng tạo đối tượng COM và thậm chí nếu COM DLL đó tồn tại, nó có thể phụ thuộc vào một DLL khác chưa được cài đặt. Bạn có thể sử dụng DependencyWalker để tìm hiểu xem đây có phải là trường hợp không.

2

Dường như đối tượng bạn đang tham chiếu không được đăng ký trên hệ thống. Tôi biết bạn nói nó đã được cài đặt, nhưng điều đó không nhất thiết có nghĩa là nó đã được đăng ký. Để xác nhận điều này, hãy tìm kiếm progID mà bạn đã sử dụng trong sổ đăng ký của mình.

Ví dụ về mã này:

set objFSO = CreateObject("Scripting.FileSystemObject") 

tôi sẽ tìm kiếm Scripting.FileSystemObject trong registry. Sau đó, tôi sẽ xem xét khóa đăng ký phía trên giá trị đã tìm thấy, cho giá trị InProcServer32. Điều này sẽ cung cấp cho bạn đường dẫn đến tệp ActiveX mà nó đã được đăng ký từ (đối với Scripting.FileSystemObject tệp là "c: \ windows \ system32 \ scrrun.dll").

Nếu bạn không thể tìm thấy progID của mình trong sổ đăng ký, thì nó không được đăng ký trên hệ thống của bạn, đó là vấn đề của bạn. Nếu nó không được đăng ký, bạn cần phải tìm ra tệp nào đăng ký nó, thường là tệp .ocx hoặc .dll trong cùng một đường dẫn thư mục của ứng dụng bên thứ ba của bạn và sau đó đăng ký (các) tệp này. Đây là lệnh để đăng ký một file:

regsvr32 /i "c:\windows\system32\scrrun.dll" 

Thậm chí nếu bạn tìm thấy những giá trị ProgID trong registry và nó tham chiếu một tập tin được hiển thị trên hệ thống của bạn, bạn vẫn có thể muốn thử đăng ký lại tập tin. Tôi đã thấy rằng đôi khi đăng ký bị hỏng bằng cách nào đó ở đâu đó và nó dễ dàng hơn để đăng ký lại các tập tin sau đó nó đã được sửa chữa vấn đề.

5

Tôi biết đây là câu hỏi cũ và đã có câu trả lời được đánh dấu là chính xác nhưng điều đó không giúp ích gì cho tôi.

Đối với bất kỳ linh hồn tội nghiệp đến theo cách này trong tương lai, kiểm tra trình duyệt của bạn Settings-

Đối với tôi, sử dụng IE, việc sửa chữa đã đi vào Tools/Internet Options, tab Security, cho khu vực có liên quan, "tùy chỉnh cấp "và kiểm tra cài đặt ActiveX. Cài đặt "Khởi tạo và điều khiển ActiveX của tập lệnh không được đánh dấu là an toàn cho tập lệnh" thành "Bật" đã khắc phục sự cố này cho tôi

+0

nhưng điều đó sẽ làm cho nó hoạt động trong trình duyệt của bạn ... bạn không thể mong đợi tất cả người dùng sẽ làm điều này để sử dụng web của bạn, vì vậy không phải là nó một chút vô dụng? –

+0

Đối với nhiều ứng dụng, nó sẽ vô dụng. Nhưng ví dụ trong môi trường của chúng tôi, ứng dụng trình duyệt của chúng tôi chỉ được sử dụng trong công ty của chúng tôi-- vì vậy chúng tôi có quyền kiểm soát cài đặt. (Đó là một chương trình cũ, không cần thiết tối ưu nhưng nó hoạt động.) – Jemmeh

5

Ngoài ra khi bạn đăng ký thành phần, hãy đảm bảo bạn sử dụng phiên bản regsvr32.exe 32 bit. Nếu bạn chỉ cần chạy regsvr32.exe trong một dấu nhắc nâng lên, nó sẽ mặc định lấy phiên bản 64-bit chuẩn (mà đủ kỳ lạ nằm trong C: \ Windows \ System32)

Phiên bản tôi tin rằng bạn cần nằm ở C: \ Windows \ SysWow64 \ regsvr32.exe

+1

Cảm ơn lời nhắc nhở; có tình huống tương tự như OP và bình luận của bạn đã giúp tôi. –

+0

Đây là bản sửa lỗi đã phân loại vấn đề cho tôi và nhanh hơn nhiều so với các giải pháp khác để thử cũng như –

36

Cũng đáng để kiểm tra rằng bạn đã có "Bật ứng dụng 32 bit" được đặt thành True trong cài đặt nâng cao của DefaultAppPool trong IIS.

+8

Ước gì tôi có thể bỏ phiếu này nhiều hơn nữa! –

+0

Điều này làm việc cho tôi. –

+1

Tôi đồng ý với @LeeEnglestone. Nó nằm trong Cài đặt tiến bộ> (Chung)> Bật các ứng dụng 32-bit –

0

Tôi cũng gặp lỗi tương tự trong vbscript.

Set objFSO = CreateObject("Scripting.FileSystemObject") 

Giải pháp:
mở dòng lệnh, hãy chạy:

regsvr32 /i "c:\windows\system32\scrrun.dll" 

và nó hoạt động

0

Tôi đã có cùng một vấn đề trong một chương trình VB6 Tôi đang viết, nơi một Form sử dụng đối tượng ScriptControl để chạy VBScripts do Người dùng chọn.

Nó hoạt động tốt cho đến ngày khác, khi nó đột nhiên bắt đầu hiển thị 'Lỗi thời gian chạy 429' khi VBScript cố gắng tạo Scripting.FileSystemObject.

Sau khi phát điên cả ngày, hãy thử tất cả các giải pháp được đề xuất ở đây, tôi bắt đầu nghi ngờ vấn đề nằm trong đơn đăng ký của mình.

May mắn thay, tôi đã có một phiên bản sao lưu của biểu mẫu đó: Tôi đã so sánh mã của họ và phát hiện ra rằng vô tình tôi đã đặt thuộc tính UseSafeSubset của đối tượng ScriptControl thành True.

Đó là sự khác biệt duy nhất trong biểu mẫu và sau khi khôi phục bản sao lưu, nó hoạt động như một sự quyến rũ.

Hy vọng điều này có thể hữu ích cho ai đó. Lên với VB6! :-)

Max - Ý

1

Nếu nó một 32 bit COM/Active X, phiên bản sử dụng 32 bit của cscript.exe/wscript.exe nằm trong C: \ Windows \ SysWOW64 \

0

tôi đã có vấn đề tương tự với Excel, tôi đã cố gắng sử dụng một DLL 32 COM với một phiên bản 64 bit Excel và tôi đã nhận lỗi này. Tôi xây dựng lại dll COM đến một phiên bản 64 bit và lỗi biến mất. Vì vậy, hãy chắc chắn rằng dll COM của bạn có cùng kiến ​​trúc (x86 vs x64) so ​​với ứng dụng của bạn.