Định nghĩa về thư viện liên kết động (tiếng Anh: Dynamic Link Library viết tắt: DLL) Là một thành phần của các phần mềm. Đặc điểm của nó là có tính khả chuyển cao, nhờ đó mà một DLL có thể được gắn vào một hoặc nhiều phần mềm khác nhau. DLL còn là đuôi của một tập tin chạy trên hệ điều hành Windows (.dll). Là thư viện chứa các hàm và dữ liệu có thể được gọi từ các module khác (module có thể là 1 ứng dụng EXE hay là một DLL khác). DLL được nạp vào bộ nhớ lúc runtime và được map vào vùng nhớ của tiến trình gọi. Một DLL là 1 module chứa các hàm, dữ liệu mà có thể được sử dụng bởi các module khác ( app hoặc dll ).
Trang 1Tìm hiểu về các file.dll trong win7
(DLL - Dynamic Link Library)
Nhóm Sv Thực Hiện: LÊ THỊ KIM ANH NGUYỄN THỊ HUẾ
Trang 2BẢNG PHÂN CÔNG CÔNG VIỆC
Nội dung Lê Thị Kim Anh Nguyễn Thị Huế Nguyễn Văn Tùng
Trang 3I. Thư viện và các loại liên kết.
Thư viện là một tập tin chứa những hàm hoặc tài nguyên khác có sẵn mà các
ứng dụng có thế lấy để sử dụng Các tài nguyên này thường cho phép nhiềuứng dụng cùng chia sẻ sử dụng dễ dàng một đoạn mã hoặc tài nguyên
Liên kết là cách thức mà trình biên dịch nhúng /kết hợp các đoạn mã thực thi
của những module thư viện (Lib) vào chương trình
Có 2 loại liên kết:
+ Liên kết tĩnh
+ Liên kết động
II. Tìm hiểu về thư viện liên kết động.
Định nghĩa về thư viện liên kết động (tiếng Anh: Dynamic Link Library -
viết tắt: DLL)
là một thành phần của các phần mềm Đặc điểm của nó là có tínhkhả chuyển cao, nhờ đó mà một DLL có thể được gắn vào một hoặcnhiều phần mềm khác nhau DLL còn là đuôi của một tập tin chạytrên hệ điều hành Windows (.dll)
Là thư viện chứa các hàm và dữ liệu có thể được gọi từ các modulekhác (module có thể là 1 ứng dụng EXE hay là một DLL khác)
DLL được nạp vào bộ nhớ lúc run-time và được map vào vùng nhớcủa tiến trình gọi
Một DLL là 1 module chứa các hàm, dữ liệu mà có thể được sửdụng bởi các module khác ( app hoặc dll )
Chức năng thư viện liên kết động: có thể hiểu một phần qua tên gọi, có tác
dụng liên kết các thành phần trong WIN Trong quá trình chạy, WIN không thểbiểu thị hết các thành phần và nói chung là có rất nhiều các File mà chạy vàchính các file DLL có tác dụng liên kết các file này với nhau tạo sự thống nhất
và ổn định của WIN
Ví Dụ: Khi xây dựng một chương trình windows nhập thông tin khách hàng,
bạn cần kiểm tra email có hợp lệ hay không khi bạn được xếp yêu cầu viết cáiform nhập thông tin khách hàng trên web, bạn lại được yêu cầu phải kiểm traemail hợp lệ vậy bạn sẽ làm gì? chắc chắn sẽ là copy cái hàm kiểm tra email
từ chương trình windows sang ứng dụng webform Vậy khi bạn làm hàngnghìn chương trình, chẳng lẽ cứ copy liên tục thế sao? DLL hay thư viện liênkết động ra ơời để giải quyết vấn đề trên, bạn chỉ cần viết một hàm kiểm tra
Trang 4mail, đóng lại thành dll, và bạn có thể sử dụng ở bất kỳ đâu, trong ví dụ đó là
cả chương trình windows và web của bạn
Các loại liên kết động : Liên kết động có hai dạng phụ thuộc vào cách nhúng
thông tin vào trong file thực thi Đó là liên kết không tường minh và liên kếttường minh (Implicit Linking và Explicit Linking)
Liên kết không tường minh (Implicit Linking) + Liên kết không tường minh hay liên kết ở thời điểm nạp (Load-time dynamic Linking) diễn ra ở thời điểm biên dịch, khi ứng dụng tạomột tham chiếu tới hàm DLL được export Tại thời điểm mã nguồn củalời gọi đó được biên dịch, lời gọi hàm DLL dịch thành một hàm thamchiếu ngoài trong đối tượng mã Để hiểu được tham chiếu ngoài này,ứng dụng phải liên kết với thư viện import (file có phần mở rộng là.LIB) đã được DLL tạo ra khi biên dịch
+ Thư viện import chỉ chứa các thông tin về thành phần được export
từ DLL mà không có một dòng lệnh giúp trình biên tập (linker) xử lýcác lời gọi hàm tới DLL Khi trình biên tập tìm thấy thông tin về hàmexport trong một file lib, và giả sử như mã lệnh của hàm đó nằm trongmột DLL có sẵn, thì để xử lý các tham chiếu đến hàm, trình biên tậpphải nhúng thêm một số thông tin vào file thực thi cuối cùng, thànhphần được dùng bởi bộ nạp hệ thống khi mà tiến trình khởi động
+ Khi bộ nạp (loader) chuẩn bị chạy một chương trình, trong đó cóchứa các liên kết động, thì nó sẽ sử dụng thông tin được nhúng (ở thờiđiểm biên dịch, như đã nói ở trên) vào file thực thi chương trình để xácđịnh các thư viện yêu cầu Nếu như nó không thể tìm được DLL, thì hệthống sẽ chấm dứt tiến trình và hiện ra một hộp thoại để thông báo lỗitương ứng Ngược lại, hệ thống sẽ nạp DLL (nếu như trước đó nó chưađược nạp) và ánh xạ các module DLL (hàm và lớp) vào trong khônggian địa chỉ của tiến trình Chú ý rằng mỗi tiến trình đều có một khônggian địa chỉ riêng, do vậy nên nhiều tiến trình có thể sử dụng chung mộtDLL Khi đó địa chỉ hàm được gọi sẽ nằm trong không gian này
+ Nếu như DLL nào đó có hàm Entry-point (như đã đề cập ở phầntrước), hệ thống sẽ gọi hàm này Tham số fdwReason sẽ có giá trị là
Trang 5DLL_PROCESS_ATTACH, xác định rằng DLL đang được gắn vào tiếntrình Nếu như giá trị trả về của hàm Entry-point không phải là TRUE,
hệ thống sẽ bỏ dở việc nạp tiến trình và thông báo lỗi
+ Khi tất cả các bước trên diễn ra mà không có lỗi nào, cuối cùng thì
bộ nạp (loader) sẽ cho phép các mã thực thi của tiến trình có thể gọihàm DLL bất cứ khi nào tham chiếu đến nó được tạo ra Các thành phầncủa DLL sẽ được ánh xạ sang không gian địa chỉ của tiến trình khi tiếntrình bắt đầu chạy và nó chỉ được nạp vào bộ nhớ khi nào cần thiết
Liên kết tường minh (Explicit Linking) + Liên kết tường minh hay còn gọi là liên kết ở thời điểm chạy (Run-time Dynamic Linking): sử dụng các con trỏ hàm ở thời điểm chạychương trình để trỏ tới các hàm trong DLL mà ta cần sử dụng Modul sẽdùng hàm LoadLibrary hoặc hàm LoadLibraryEx để nạp DLL khi nào
nó muốn sử dụng hàm trong DLL Sau khi DLL đã được nạp, modul sửdụng hàm GetProcAddress để lấy về địa chỉ trỏ tới hàm xuất ra trongDLL và đưa vào một con trỏ hàm nào đó Các thao tác tiếp theo củamodul sẽ làm việc với con trỏ hàm này
+ Hầu hết các ứng dụng được phát triển đều sử dụng liên kết ở thờiđiểm nạp (load-time dynamic linking) bởi vì đó là cách liên kết dễ dàngnhất Nhưng dựa vào một số các ràng buộc, thỉnh thoảng phương pháptrên là không cần thiết Sau đây là một số trường hợp cụ thể nên dùngliên kết ở thời điểm chạy thay thế:
+ Khi ứng dụng không biết tên của DLL hoặc thành phần export sẽ sửdụng để nạp Ví dụ như ứng dụng có thể lưu giữ tên của DLL và thànhphần export trong một file cấu hình Sau khi chương trình đã đóng gói,việc thay đổi DLL đơn giản chỉ là việc thay đổi file cấu hình mà khôngphải biên dịch lại toàn bộ chương trình
+ Một tiến trình sử dụng liên kết ở thời điểm nạp có thể bị chấm dứtbởi hệ thống nếu như DLL không tìm thấy ở thời điểm bắt đầu chạy.Tuy nhiên, nếu sử dụng liên kết động ở thời điểm chạy thì chương trìnhkhông bị chấm dứt ngay, mà còn cho ta một số phương án để có thể
Trang 6khắc phục lỗi Ví dụ như, khi không tìm thấy DLL, chương trình khôngdừng chương trình ngay lập tức mà có thể tùy chọn cho phép ngườidùng cung cấp một đường dẫn khác tới DLL.
+ Một tiến trình sử dùng liên kết ở thời điểm nạp cũng có thể bị thoátnếu như một trong số các DLL nó liên kêt đến có hàm Entry-point trả vềgiá trị không phải là TRUE Trong khi đó tiến trình sử dụng liên kết ởthời điểm chạy không bị kêt thúc trong trường hợp này nếu như ta cócác cách thức xử lý hợp lý
+ Một ứng dụng mà liên kết không tường minh tới quá nhiều DLL sẽkhởi động rất chậm bởi vị Windows nạp tất cả các DLL đó khi ứngdụng nạp để chạy Để tăng hiệu suất khi khởi động, ứng dụng có thể cócác liên kết không tường minh đến các DLL cần thiết được dùng ngaykhi chương trình bắt đầu, và dùng liên kết tường minh tới các DLL khácở thời điểm hợp lý hơn
+ Liên kết động ở thời điểm chạy sẽ loại bỏ được việc tạo các thưviện import Nếu như những thay đổi trong DLL là do thứ tự export củacác hàm thay đổi, ứng dụng sử dụng liên kết ở thời điểm chạy sẽ khôngphải liên kết lại (giả sử các lời gọi GetProcAddress với tham số là têncủa hàm chứ không phải là giá trị chỉ số của hàm ), còn các ứng dụng sửdụng liên kết ở thời điểm nạp sẽ phải liên kết lại tới thư viện importmới
Dạng file của thư viện liên kết động: LIB và DLL
File Lib:
+ Thưviện nhập (Import library)
+ Không chứa mã lệnh của các hàm
+ Chỉ chứa các thông tin cần thiết để Hệ điều hành nạp thư viện DLL và xác định hàm export trong DLL
+ Sử dụng khi dùng cách thức load-time dynamic linking.
Trang 7 File DLL:
+ Chứa mã lệnh nhị phân của các hàm thư viện
+ Được tải vào bộ nhớ khi ứng dụng gọi hàm thư viện
+ Cần có khi thực hiện ứng dụng
- Mã lệnh của các hàm sẽ không được nhúng vào trong file chương trình của ứng dụng
- Ứng dụng chỉ cần lưu thông tin của hàm thư viện, và khi cần, Hệ điều hành sẽ tải các hàm thư viện vào bộ nhớ.
III. Ưu và nhược điểm của thư viện liên kết động:
Ưu điểm:
Giảm không gian sử dụng của bộ nhớ+ Hàm và dữ liệu trong các DLL được chia sẻ bởi các ứng dụngdùng nó Như trong ví dụ ở trên, các ứng dụng Winword, MicrosoftExcel, Internet Explorer sẽ dùng chung một hàm print() đã được biêndịch thành mã máy và để trong một DLL nào đó, mà không cần phảibao gồm toàn bộ mã nguồn của hàm Bên cạnh đó, ta cũng có thểgiảm được dung lượng bộ nhớ của chương trình tùy vào cách dùngcác hàm DLL (Run-time hay Load-time, sẽ được trình bày sau): ứngdụng của ta sẽ chỉ nạp các hàm này khi nào dùng đến
+ Mã trong DLL nằm trong khu vực chỉ cho đọc (read-only) vàđược nạp vào các trang nhớ đánh dấu read-only Nó cho phép hệthống ánh xạ DLL vào trong không gian địa chỉ nhớ của các tiếntrình sử dụng nó Và như vậy, DLL được nạp chỉ một lần, và nếumột tiến trình yêu cầu sử dụng nó, hệ điều hành chỉ việc ánh xạ DLLtới không gian địa chỉ của ứng dụng gọi DLL
Giảm Swapping (tráo đổi)
+ Ta tưởng tượng có hai tiến trình sử dụng cùng một DLL, một tiếntrình kết thúc công việc của nó và thoát ra Nhưng DLL sẽ không gỡ
bỏ ra khỏi bộ nhớ vì DLL quản lý thời gian tồn tại của nó bằng cách
Trang 8giữ một bộ đếm tham khảo cho các tiến trình sử dụng nó Mỗi khi cómột tiến trình nào đó yêu cầu sử dụng DLL, bộ đếm tham khảo sẽtăng giá trị của nó lên 1; còn khi có một tiến trình gỡ bỏ không sửdụng nữa thì bộ đếm lại giảm đi 1 DLL sẽ tự động xóa bỏ ra khỏi bộnhớ chừng nào bộ đếm tham khảo trở về 0, trạng thái cho biết khôngcòn có tiến trình nào sử dụng DLL nữa.
+ Bây giờ giả sử có một tiến trình bắt đầu chạy và yêu cầu hệ thốngnạp một DLL hiện đang được dùng bởi một ứng dụng đã chạy trước
đó Chuyện gì sẽ xảy ra? Liệu hệ thống có nạp DLL một lần nữakhông? Hiển nhiên là không, vì DLL được định nghĩa ra để có thểdùng chung giữa các ứng dụng khác nhau Thành phần đã nạp DLL
có tất cả các hàm và dữ liệu của nó trong bộ nhớ và hệ thống sẽ chỉphải ánh xạ chúng tới không gian địa chỉ của tiến trình mới chochúng hoạt động Nó liên quan đến việc đọc các hàm và dữ liệu DLL
từ trên đĩa
Có thể đóng gói và đưa vào chương trình khác
+ Khi đã xây dựng được một DLL với các chức năng hợp lý, ta cóthể sử dụng nó trong bất cứ ứng dụng nào mà ta cảm thấy thích hợp
Ví dụ trong một ứng dụng nhỏ, ta có tập hợp các hàm chuyển đổi giátrị từ String sang ngày tháng và đóng gói nó vào trong một DLL Khi
đó, ở một ứng dụng khác, khi có nhu cầu chuyển đổi như trên, thì ta
sẽ không phải viết lại các hàm hoặc đính kèm mã nguồn của các hàm
đó vào chương trình đó nữa mà sử dụng trực tiếp DLL mà ta đã biêndịch
Tạo ra khả năng tương tác giữa các ngôn ngữ lập trình
+ Một ứng dụng có thể sử dụng các DLL viết bằng bất cứ ngôn ngữlập trình nào Các nhà phát triển phần mềm chỉ việc đóng gói cácmodule của mình vào trong một DLL với ngôn ngữ ưa thích, sau đómodule này có thể được sử dụng trong các ứng dụng viết bằng C++hay Visual Basic
Dễ dàng đưa ra sự hỗ trợ sau khi đã chuyển giao ứng dụng cho khách hàng
Trang 9+ Nếu như ta phát hiện có một số thành phần trong ứng dụng cầnphải được thay đổi và sự thay đổi này cần phải được cập nhật chokhách hàng Đóng gói và phân phối lại toàn bộ sản phẩm đã bán chotất cả các khách hàng của chúng ta là một công việc hết sức khókhăn Tuy nhiên ta có thể tránh được điều này nếu như ứng dụng của
ta được thiết kế tốt thành các module và đóng gói chúng trong cácDLL Khi một module nào đó cần thay đổi, ta chỉ việc đóng gói lạiDLL chứa module đó và gửi tới khách hàng, cho họ cập nhật
DLL Hell
+ Là khó khăn lớn nhất thỉnh thoảng gặp khi dùng DLL Ta có thểgặp những thông báo như:
The ordinal abc could not be located in the dynamic-link library xyz.dll
+ Hoặc khi cài đặt một ứng dụng mới, một số chương trình khác
đang bình thường bỗng nhiên bị trục trặc hoặc thậm chí không thểnạp lên để chạy được
+ Đó là các dấu hiệu của DLL Hell trên máy tính của ta Nguyênnhân cơ bản của sự cố trên là do chương trình cài đặt không kiểm traphiên bản của các DLL trước khi sao lưu nó vào trong thư mục hệthống Khi một DLL mới thay thế một DLL cũ có sẵn, và nếu DLLmới này có một số thay đổi lớn làm cho nó không thể tương thíchngược lại với các chương trình sử dụng phiên bản cũ, nó sẽ làm rốiloạn chương trình đó
Nhược điểm:
Mặc dù hầu hết các ngôn ngữ lập trình đều hỗ trợ việc sử dụng thư việnliên kết động, nhưng lại có rất ít ngôn ngữ lập trình cho phép tạo ra chúng.Với việc sử dụng DLL, người ta có thể tập trung nhiều hơn vào các xử lýlogic của hệ thống, mà không cần phải quan tâm đến những xử lý thôngthường, mà nếu phát triển từ đầu, sẽ chi phí rất nhiều thời gian và công sức.Các công việc này đã được thực hiện bởi một người nào đó, và đóng góidưới dạng các DLL
Trang 10 Khó sử dụng hơn.
IV. Định nghĩa và giải thích về một tập tin DLL.
Một tập tin thư viện liên kết động (DLL) là một tập tin thực thi cho phépchương trình để chia sẻ mã và các nguồn lực cần thiết để thực hiện nhiệm vụ
cụ thể Microsoft Windows cung cấp các tập tin DLL có chức năng và cácnguồn lực cho phép dựa-trên-Windows chương trình để hoạt động trong môitrường Windows
DLL thông thường xuất hiện như là các tập tin với một.Phần mở rộng DLL;Tuy nhiên, họ cũng có thể có một.EXE hoặc phần mở rộng khác Ví dụ,Shell.dll cung cấp các đối tượng liên kết và nhúng (OLE) kéo và thả các thóiquen Windows và các chương trình khác sử dụng
Kernel.exe, User.exe và Gdi.exe là những ví dụ của file DLL với.Mở rộngEXE Họ cung cấp mã, dữ liệu hoặc thói quen để chương trình đang chạy trong
hệ điều hành Windows Ví dụ, một trong những tập tin này cung cấp các chứcnăng "CreateWindow" chương trình sử dụng khi một cửa sổ mới được tạo ratrên màn hình
Trong Windows, trình điều khiển cài đặt cũng là một DLL Một chương trình
có thể mở, sử, truy vấn, vô hiệu hóa và đóng trình điều khiển dựa trên hướngdẫn văn bản trong các tập tin DLL
DLL có thể được tìm thấy trong thư mục Windows, thư mục Windows\Systemhoặc Window\System32 hoặc trong một chương trình thư mục
Nếu một chương trình được bắt đầu và một trong các tập tin DLL bị thiếu hoặc
bị hư hỏng, bạn có thể nhận được một thông báo lỗi như: "Không thể tìm thấyxyz.dll" Nếu một chương trình được bắt đầu với một tập tin DLL lỗi thời hoặc
Trang 11tập tin DLL không hạnh phúc, thông báo lỗi "Cuộc gọi đến không xác địnhdynalink" có thể được hiển thị Trong các tình huống, các tập tin DLL phảiđược thu được và được đặt trong thư mục thích hợp để cho chương trình đểchạy một cách chính xác.
Bằng cách sử dụng một DLL, một chương trình có thể được modularized thànhphần riêng biệt Ví dụ, một chương trình kế toán có thể được bán bởi mô-đun.Mỗi mô-đun có thể được nạp vào chương trình chính tại thời gian chạy nếumô-đun đó được cài đặt Bởi vì các mô-đun riêng biệt, thời gian tải của chươngtrình là nhanh hơn, và một mô-đun chỉ được nạp khi chức năng đó được yêucầu Ngoài ra, bản Cập Nhật dễ dàng hơn để áp dụng cho mỗi mô-đun màkhông ảnh hưởng đến các bộ phận khác của chương trình Ví dụ, bạn có thể cómột chương trình tính lương, và thuế suất thay đổi mỗi năm Khi những thayđổi này đang bị cô lập một DLL, bạn có thể áp dụng một bản Cập Nhật màkhông cần phải xây dựng hoặc cài đặt toàn bộ chương trình một lần nữa
Danh sách sau đây mô tả một số các tập tin được thực hiện như dll trongWindows hệ điều hành:
Điều khiển ActiveX (.ocx) tập tin
Một ví dụ của điều khiển ActiveX là một điều khiển lịch mà cho phépbạn chọn một ngày lịch
Kiểm soát tập tin bảng điều khiển (.cpl)
Một ví dụ về một tập tin cpl là một mục mà nằm trong bảng điều khiển.Mỗi mục là một DLL chuyên ngành
Tệp trình điều khiển (.drv) thiết bị
Một ví dụ về một trình điều khiển thiết bị là một trình điều khiển máy inkiểm soát việc in ấn với máy in
Một DLL có thể khai báo 2 loại hàm : exported và internal
Hàm exported có thể được gọi bởi module khác cũng như trong DLL mà
nó khai báo
Hàm internal thường chỉ được gọi từ trong DLL mà nó khai báo
Mặc dù 1 DLL có thể export dữ liệu, nhưng thường thì chúng chỉ được sử dụngbởi các hàm bên trong DLL đó Tuy nhiên, không có gì ngăn cản các modulekhác đọc hoặc viết các địa chỉ đó
DLL cung cấp 1 cách để module hóa ứng dụng, qua đó các hàm của chúng cóthể được cập nhật và sử dụng lại 1 cách dễ dàng
Trang 12 DLL cũng giúp giảm lượng bộ nhớ , vì thay vì một số ứng dụng sử dụng cùng
1 hàm ở cùng 1 thời điểm, thì mỗi chúng nhận bản sao dữ liệu trong DLL , cònDLL code sẽ được share
Khi biến Count=0 hay process kết thúc, DLL được giải phóng khỏi bộ nhớ
Các hàm DLL được thực thi trong “ngữ cảnh”của tiểu trình (Thread) gọi hàm,
do đó:
DLL sử dụng Stack của tiểu trình
DLL sử dụng không gian địa chỉ ảo của tiến trình gọi
DLL cấp phát bộ nhớ cho những biến động trên không gian địa chỉ ảocủa tiến trình gọi
Khuyến khích kiến trúc mô-đun
Một DLL giúp thúc đẩy phát triển các mô-đun chương trình Điều này sẽ giúpbạn phát triển lớn các chương trình yêu cầu nhiều phiên bản ngôn ngữ hoặcmột chương trình đòi hỏi kiến trúc mô-đun Một ví dụ về một chương trìnhmô-đun là một chương trình kế toán có nhiều mô-đun có thể được tự động nạptại thời gian chạy
Eases triển khai và cài đặt
Khi một chức năng trong một DLL cần một bản Cập Nhật hoặc sửa chữa một,triển khai và cài đặt các tệp DLL không yêu cầu các chương trình để đượcrelinked với tệp DLL Ngoài ra, nếu nhiều chương trình sử dụng cùng mộtDLL, nhiều chương trình sẽ được hưởng lợi tất cả từ bản Cập Nhật hoặc sửachữa Vấn đề này thường xuyên hơn có thể xảy ra khi bạn sử dụng một DLLbên thứ ba mà thường xuyên cập nhật hay súng gắn cứng
Trang 13VII. Làm thế nào để xác định nguồn gốc của tập tin DLL
Để xác định số phiên bản, tên công ty hoặc các thông tin khác về một tập tin:
1/Bấm vào Bắt đầu, trỏ tới Tìm, sau đó bấm vào Tệp hoặc Thư mục.
2/Trong hộp Named , nhập tên của tập tin bạn muốn tìm, ví dụ: "shell32.dll" (không
có dấu ngoặc kép), nhấp vào Ổ đĩa cứng địa phương hoặc ký tự ổ đĩa bạn muốn tìm kiếm trong Tìm trong hộp, và sau đó nhấp vào Tìm thấy bây giờ.
3/Nhấp chuột phải vào tập tin trong danh sách các tìm thấy tệp, bấm thuộc tính, và sau đó nhấp vào tab Phiên bản
4/Nếu tập tin là một tập tin Microsoft, trích xuất bản sao mới của các tập tin Để biếtthông tin về giải nén tệp của Windows, hãy xem bài viết sau trong cơ sở kiến thứcMicrosoft:
ID của bài: 129605
Tiêu đề: Làm thế nào để giải nén tập tin nén Windows ban đầu
Nếu tên công ty được giới thiệu trên các phiên bản tab là khác nhau hơn so vớiMicrosoft, liên hệ với các nhà sản xuất để được trợ giúp
VIII. Quản lí các tập tin DLL trong window.
Việc này nhằm một lẽ duy nhất là tránh các xung đột về phần mềm trong máy tính.Giả sử bạn có Microsoft Word được cài đặt đúng trong PC, nó hoạt động tốt nhưng saukhi bạn cài một chương trình mới thì Word bắt đầu có sự cố Các biểu tượng hiển thịdưới dạng các đối tượng màu đen, hay những lúc thoát khỏi Word thì Windows lại hiểnthị thông báo lỗi General Protection Fault Bạn tuy đã thử cài lại Word nhưng tình trạngtrên vẫn tái hiện bởi lỗi này do một nguyên nhân duy nhất, đó chính là vì các tập tin cóphần mở rộng dll (dynamic – link library: thư viện liên kết động) bị lỗi Các tập tin thư
Trang 14viện này vốn được sử dụng bởi Windows và nhiều chương trình ứng dụng nhằm thựchiện một tác vụ nào đó, thí dụ mở tập tin hoặc hiển thị hộp thoại Windows bao gồmnhiều tập tin dll được cài đặt sẵn, nhưng một số trình ứng dụng khác khi cài đặt có thểthay thế các tập tin dll hiện có bằng các phiên bản của riêng nó.
Các sự cố xảy ra lúc một trình ứng dụng trên PC sử dụng dll vốn đã được cập nhật bởiphần mềm mới và tập tin dll mới không tương thích với phần mềm trước đây, hoặc tậptin dll mới bị hỏng Việc cài đặt lại các chương trình trước đây cũng không cải thiệnđược
Có trên 700 tập tin dll trong thư mục \Windows\System Một chương trình ứng dụng nhỏ
có thể cài đặt khoảng 50 tập tin dll trong thư mục được chia sẻ này Và đương nhiên đểtránh tình trạng không mong muốn xảy ra , bạn phải có biện pháp để kiểm tra cũng nhưquản lý các tập tin dll của mình:
1 Sao lưu dự phòng thư mục \Windows\System: nếu có chỗ trên ổ đĩa cứng, bạn nên saolưu toàn bộ thư mục trên trước khi cài đặt một phần mềm mới Sau khi cài đặt phần mềm,nếu một chương trình khác có sự cố thì đã có sẵn tập tin dll trước đây cho bạn Tuynhiên’ làm thế nào để xác định được tập tin dll nào gây ra sự cố? Trước tiên, hãy đặt câuhỏi các tập tin dll nào đã bị thay đổi bởi phần mềm mới và các tập tin dll nào mà phầnmềm cũ sử dụng để thay thế từng tập tin cho đến khi sự cố được xử lý xong?
2 Kiểm soát các tập tin đang được cập nhật lúc cài đặt: bạn phải biết các tập tin nào màmột chương trình cài đặt ứng dụng đã viết sang \Windows\System hay bất kỳ thư mụcnào và biết các thay đổi đối với tập tin win.ini Bạn có thể sử dụng phần mềm NortonCleanSweep (www.symantec.com) chuyên theo dõi chương trình khi cài đặt đã làmnhững gì rồi lưu lại thành file để phục vụ cho việc gỡ bỏ sau này Một tiện ích khác chophép bạn xem các tập tin dll đang được nạp trong bộ nhớ là DLL Show của GregoryBraun (www.gregorybraun.com) Chạy DLL Show lúc một chương trình ứng dụng đượctải Ví dụ, nếu một chương trình phần mềm ứng dụng gây ra sự cố, hãy sử dụng DLLShow để liệt kê các tập tin dll vốn có thể bị hỏng Nếu phần mềm hoạt động một cách
“ngon lành“ trên PC này, nhưng lại tạo ra một lỗi trên PC khác, hãy chạy DLL Show trên
PC đang hoạt động tốt Ngoài ra, trong chương trình này còn cung cấp cho bạn một bảngliệt kê 6.118 lỗi của Windows thường hiển thị dưới dạng số hay ký hiệu hay làm ta lúngtúng (Windows>Erros Codes)
3 Một trường hợp xảy ra là khi bạn cài một chương trình phần mềm mới, chương trìnhnày vì một số lý do thông báo không thể chạy được do thiếu tập tin dll, bạn hãy vào trangWeb: www.dll-files.com để tải tập tin đó về Đây là một thư viện đồ sộ các tập tin dll hữu
Trang 15ích cho máy tính, nhưng đặc điểm chính của nó là các tập tin dll này hoàn toàn “ zin” vàbạn có thể tin cậy được.
Theo thống kê có khoảng trên 3.100 lỗi sẽ xảy ra nếu thiếu một tập tin dll nào đó hay tậptin này bị hư Vì vậy, ngay từ bây giờ, bạn hãy kiểm soát thật tốt máy tính của mình đểhạn chế đến mức thấp nhất những sai sót đó
IX. Tìm hiểu một số file.dll thông dụng trong win7.
1. Netshell.dll :
Network Connections Shell (liên quan đến mạng)
• Thông báo lỗi khi bạn mở các thuộc tính của kết nối mạng: "một lỗi bất ngờ xảy ra"
Triệu chứng: Khi bạn mở các thuộc tính của kết nối mạng trong cặp kết
nối mạng, bạn có thể nhận được thông báo lỗi sau:
Lỗi bất ngờ xảy ra.
Nguyên nhân: Vấn đề này có thể xảy ra nếu một số thiết đặt đăng ký bị
hư hỏng Cài đặt đăng ký bị hư hại có thể ngăn cản bạn xem các thuộctính của kết nối mạng trong cặp kết nối mạng
Giải pháp: Để làm việc xung quanh vấn đề này, reregister các tập tin
Netshell.dll Để làm như vậy, hãy làm theo các bước sau:
1/ Bấm bắt đầu, và sau đó bấm chạy.
Trang 162/ Trong các mở hộp, gõ regsvr32
%systemroot%\system32\netshell.dll, và sau đó nhấp vào OK.
3/ Trong hộp thoại RegSvr32 , bấm vào OK.
2. Shell32.dll :
Thuộc chương trình Microsoft Windows Shell (liên quan internet, hiệu suấtcpu,bộ nhớ), chứa hầu như tất cả các icon của hệ thống như my computer,documents, các hộp thoại hỏi khi delete, download, copy,v.v là file quan trọnghàng đầu khi mod giao diện
• Các lỗi Shell32.dll khi bạn khởi động máy tính.
Triệu chứng: Khi bạn khởi động máy tính, Notepad sẽ khởi động và
một hay nhiều tài liệu văn bản có chứa các dòng sau sẽ xuất hiện trênbàn làm việc của Windows:
[.ShellClassInfo] LocalizedResourceName=@%SystemRoot
%\system32\shell32.dll,-21787
Nguyên nhân:
Tệp Desktop.ini tồn tại trong một hay nhiều thư mục sau, tại đó ổ đĩa
là ổ đĩa có Windows được cài đặt:
ổ đĩa:\Documents and Settings\All Users\Start Menu\Programs
ổ đĩa:\Documents and Settings\All Users\Start Menu
ổđĩa:\Document and Settings\All User\Start Menu\Programs\Startup
Tệp Desktop.ini chứa các dòng sau:
[.ShellClassInfo]
LocalizedResourceName=@%SystemRoot
%\system32\shell32.dll,-21787
Giải pháp:
Phương pháp 1: Xóa Tệp Desktop.ini
1/Khởi động Windows Explorer
2/Trên menu Công cụ, bấm Tuỳ chọn Thư mục, sau đó bấm tab Xem.
3/Trong ô Cài đặt nâng cao, bấm để bỏ chọn hộp kiểm Ẩn phần mở rộng của các loại tệp đã biết và hộp kiểm Ẩn các tệp hệ điều hành được bảo vệ (nếu chúng chưa được bỏ chọn), rồi bấm OK.
Trang 174/Xoá mọi trường hợp của Tệp Desktop.ini có chứa các dòng được mô tả trước
đó trong phần "Hiện tượng" của bài viết này Để tiến hành:
a. Định vị từng thư mục sau, bấm chuột phải vào tệp Desktop.ini (nếu tệptồn tại trong thư mục đó), rồi bấm Mở:
ổ đĩa:\Documents and Settings\All Users\Start Menu\Programs
ổ đĩa:\Documents and Settings\All Users\Start Menu
ổ đĩa:\Documentand Settings\All User\Start Menu\Programs\Startup
5/ Khởi động lại máy tính của bạn và xác nhận rằng vấn đề được giải quyết
Phương pháp 2:Sử dụng Tiện ích Cấu hình Hệ thống (Msconfig.exe)
để Tắt Mục Khởi động
1/ Bấm Bắt đầu, rồi bấm Chạy.
2/ Trong ô Mở, gõ msconfig, rồi bấm OK.
3/ Bấm vào tab Khởi động.
4/ Bấm để bỏ chọn hộp kiểm cạnh bất kỳ mục bàn làm việc nào trong cột Mục Khởi động được liệt kê dưới dạng Khởi động Chung trong cột Vị trí và cũng được xác định trong bất kỳ vị trí sau (như được đề cập trong cột Lệnh).
ổ đĩa:\Documents and Settings\All Users\Start Menu\Programs
ổ đĩa:\Documents and Settings\All Users\Start Menu
ổ đĩa:\Documentand Settings\All User\Start Menu\Programs\
Startup
5/ Bấm OK để thoát khỏi Tiện ích Cấu hình Hệ thống.
6/ Khởi động lại máy tính của bạn và xác nhận rằng vấn đề được giải quyết
Trang 18• "Đăng nhập người dùng giao diện DLL Msgina.dll thất bại để tải" thông báo lỗi sau khi bạn cài đặt bản Cập Nhật bảo mật MS04-003
Triệu chứng:
Sau khi bạn cài đặt bản Cập Nhật bảo mật MS04-003 được mô tảtrong bài viết cơ sở kiến thức Microsoft 832483, bạn có thể khôngthể khởi động máy tính của bạn Thay vào đó, bạn có thể nhận đượcthông báo lỗi sau:
Đăng nhập người dùng giao diện DLL Msgina.dll Lỗi khi nạp Liên
hệ với người quản trị hệ thống để thay thế DLL, hay khôi phục DLLgốc
Nguyên nhân: Vấn đề này có thể xảy ra khi thư mục tạm thời của bạn,
theo quy định của các biến môi trường nhiệt độ, được mã hóa Cài đặtbản Cập Nhật bảo mật MS04-003 sử dụng chiết xuất các nội dung của
nó đến một thư mục con của thư mục TEMP Nếu thư mục tạm thờiđược mã hóa, các tập tin Cập Nhật không thành công sao vào thư mụcWindows\System32 khi bạn khởi động lại máy tính của bạn Một trongcác tập tin cài đặt bản Cập Nhật bảo mật MS04-003 yêu cầu của các tậptin Microsoft nhận dạng đồ họa và xác thực DLL (Msgina.dll) Các tậptin Msgina.dll là, lần lượt, theo yêu cầu của các dịch vụ trình
Giải pháp:
Khôi phục máy tính của bạn đến một nhà nước làm việc
Để khôi phục máy tính của bạn đến một nhà nước làm việc, hãy làm theo các bước sau:
1/ Khi bạn nhận được thông báo lỗi được mô tả trong phần "Triệu
chứng", hãy nhấp vào khởi động lại
2/ Nhấn F8 liên tục khi máy tính của bạn bắt đầu để khởi động lại Điều này gây ra trình đơn Tùy chọn nâng cao Windows
3/ Sử dụng các mũi tên trên bàn phím của bạn để chọn Cấu hình biết đến cuối của tốt, và sau đó nhấn ENTER.
Tự cài đặt bản Cập Nhật bảo mật MS04-003
Để có được và cài đặt bản Cập Nhật bảo mật, hãy làm theo các bước sau:
Trang 191/ Tải về Cập Nhật bảo mật MS04-003, và sau đó lưu nó vào máy tính của bạn Để biết thêm chi tiết về làm thế nào để tải về bản cập nhật này, bấm số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
832483 MS04-003: Bộ đệm tràn ngập trong một chức năng MDAC có thể cho phép thực thi mã
2/ Cài đặt bản Cập Nhật bảo mật MS04-003 bằng cách chạy các gói cài đặt với chuyển đổi dòng lệnh /T: Chuyển đổi này cho phép bạn để xác định một vị trí không được mật mã cho trình cài đặt để trích xuất nội dung đóng gói để Ví d ụ, để cài đặt phiên bản tiếng Anh-ngôn ngữ Cập Nhật bảo mật MS04-003 cho Intel x 86 trên máy tính, và để giải nén cáctập tin vào thư mục C:\alternate_temp, loại sau tại dấu nhắc lệnh:
Để thay đổi giao diện của hộp thoại Open / Save,
hộp màu, hộp in, tìm kiếm và thay thế
• Thông báo lỗi: Các tập tin Comdlg32.dll không thể khởi động
Triệu chứng: Khi bạn cố gắng để bắt đầu một chương trình trong Windows,
bạn có thể nhận được một trong các thông báo lỗi sau đây:
Lỗi bắt đầu chương trình Các tập tin Comctl32.dll không thể khởi động.Kiểm tra tệp để xác định vấn đề
Lỗi bắt đầu chương trình Tệp Comdlg32.dll không thể khởi động Kiểmtra tệp để xác định vấn đề
Lỗi bắt đầu chương trình Các tập tin Shell32.dll không thể khởi động.Kiểm tra tệp để xác định vấn đề
Lỗi bắt đầu chương trình Các tập tin Lz32.dll không thể khởi động.Kiểm tra tệp để xác định vấn đề
Lỗi bắt đầu chương trình Các tập tin Version.dll không thể khởi động.Kiểm tra tệp để xác định vấn đề
Lỗi bắt đầu chương trình Các tập tin Winmm.dll không thể khởi động.Kiểm tra tệp để xác định vấn đề