Bản vá dll phần mềm của tôi không được cập nhật trên windows 10


-1

Tôi có một tệp hiện có trên windows 10 (dll, .exe, .msi) mà tôi đang cố cập nhật bằng cách gửi một số bản vá. Nhưng vấn đề là trong quá trình cập nhật nếu bất kỳ tệp nào đang được sử dụng và tôi đang cố cập nhật tệp đó bằng cách thay thế tệp đó bằng tệp cập nhật mới, các cửa sổ sẽ nhắc cửa sổ bật lên xóa tệp cho tệp hiện có. Nếu chúng tôi nói có như đã xóa thành công nhưng nó không bị xóa cho đến khi người dùng cuối cùng phát hành tệp. Sau đó, tệp cập nhật mới không được thay thế ở nơi đó.

Chỉnh sửa: Người đăng đã cho biết trong một bình luận rằng vấn đề của anh ta liên quan đến các DLL đã đăng ký.


"Tôi đang cố gắng cập nhật bằng cách gửi một số bản vá" những bản vá nào, vui lòng giải thích.
Moab

Làm thế nào bạn đẩy những cập nhật này chính xác?
Ramhound

bản vá phần mềm của tôi - bó .exes đẩy đến máy khách
sams

Câu trả lời:


2

Làm cách nào để thay thế một DLL đang sử dụng?

Cập nhật thư viện liên kết động

Đôi khi cần phải thay thế một DLL bằng một phiên bản mới hơn.   Trước khi thay thế một DLL, thực hiện kiểm tra phiên bản để đảm bảo rằng bạn đang   thay thế một phiên bản cũ hơn bằng một phiên bản mới hơn. Nó có thể   thay thế một DLL đang được sử dụng. Phương pháp bạn sử dụng để thay thế DLL   đang sử dụng phụ thuộc vào hệ điều hành bạn đang sử dụng. Trên Windows   XP trở lên, các ứng dụng nên sử dụng Ứng dụng biệt lập và   Lắp ráp bên cạnh .

Không cần thiết phải khởi động lại máy tính nếu bạn thực hiện   các bước sau:

  • Sử dụng MoveFileEx Chức năng đổi tên DLL được thay thế. Không chỉ định MOVEFILE_COPY_ALLOWEDvà đảm bảo tập tin được đổi tên   nằm trên cùng một ổ đĩa chứa tệp gốc. Bạn cũng có thể   chỉ cần đổi tên tệp trong cùng một thư mục bằng cách cho nó khác   sự mở rộng.
  • Sao chép DLL mới vào thư mục chứa DLL được đổi tên. Tất cả các ứng dụng sẽ sử dụng DLL mới.
  • Sử dụng MoveFileEx với MOVEFILE_DELAY_UNTIL_REBOOT để xóa DLL được đổi tên.

Trước khi bạn thực hiện thay thế này, các ứng dụng sẽ sử dụng bản gốc   DLL cho đến khi nó được tải. Sau khi bạn thực hiện thay thế, các ứng dụng   sẽ sử dụng DLL mới. Khi bạn viết một DLL, bạn phải cẩn thận để   đảm bảo rằng nó đã được chuẩn bị cho tình huống này, đặc biệt là nếu DLL   duy trì thông tin nhà nước toàn cầu hoặc liên lạc với người khác   dịch vụ. Nếu DLL không được chuẩn bị cho một sự thay đổi trong trạng thái toàn cầu   thông tin hoặc giao thức truyền thông, cập nhật DLL sẽ yêu cầu   bạn khởi động lại máy tính để đảm bảo rằng tất cả các ứng dụng đang sử dụng   cùng một phiên bản của DLL.

Nguồn Cập nhật thư viện liên kết động (Windows)


Cách thay thế các tệp đang sử dụng khi khởi động lại Windows

Bài viết này mô tả một phương pháp khác mà bạn có thể sử dụng để thay thế các tệp   được sử dụng bởi Windows. Phương pháp này sử dụng sổ đăng ký để thay thế một   tập tin khi khởi động, trước khi tập tin được Windows truy cập.

Các bước sau đây trình bày cách thay thế tệp Win32k.sys trong   các %SystemRoot%\System32 thư mục chứa tệp Win32k.sys nằm trong   thư mục C: \ Temp. Bạn có thể sử dụng các biến thể của phương pháp này để thay thế   bất kỳ tập tin nào nếu cài đặt Windows của bạn có khả năng khởi động.

  1. Bắt đầu Trình chỉnh sửa sổ đăng ký (Regedt32.exe).
  2. Xác định vị trí khóa sau trong sổ đăng ký Windows:
    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
  3. Tạo một giá trị mới bằng cách sử dụng thông tin sau:
    • Tên giá trị: PendingFileRenameOperations
    • Loại dữ liệu : REG_MULTI_SZ
    • Dữ liệu giá trị: \ ?? \ c: \ temp \ win32k.sys! \ ?? \ c: \ winnt \ system32 \ win32k.sys
    • Lưu ý rằng dữ liệu giá trị được gõ trên hai dòng riêng biệt.
  4. Thoát khỏi Trình chỉnh sửa sổ đăng ký.
  5. Khởi động lại máy tính.

Nguồn Cách thay thế các tệp đang sử dụng khi khởi động lại Windows


Điều này không làm việc cho dlls đã đăng ký.
harrymc

@harrymc Sau đó, người dùng nên cập nhật câu hỏi của mình, không đề cập đến các DLL đã đăng ký.
DavidPostill

Đó là trong các ý kiến, nhưng tôi đã làm điều đó cho anh ta.
harrymc

1

Cách chính xác để thay thế một DLL là:

  • Đổi tên tập tin DLL
  • Lưu trữ tệp DLL mới dưới tên chính xác
  • Các tập tin được đổi tên sẽ bị xóa khi nó không còn được sử dụng.

Đối với các DLL đã đăng ký, bạn phải hủy đăng ký tại chỗ và đăng ký mới phiên bản. Quá trình hủy đăng ký (khi được thực hiện với trình cài đặt) sẽ phát hiện sử dụng DLL và cảnh báo bạn rằng bạn cần phải khởi động lại. Thêm vào đó, điều này cũng có nghĩa là các DLL không thể được tải (một khi chưa đăng ký) trong khi bạn đang sao chép các tệp mới hoặc đăng ký tập tin mới.

Do đó, bạn nên phân phối bản vá của mình dưới dạng trình cài đặt. Ví dụ: bạn có thể sử dụng miễn phí Cài đặt Inno . Khi tôi sử dụng lần cuối, bạn cần thiết lập các thuộc tính của DLL để được cài đặt để làm đăng ký và đăng ký lại. Quá trình sau đó sẽ được tự động mà không cần lập trình đặc biệt Về phía bạn.

Nếu bạn không thể phân phối bản vá của mình dưới dạng trình cài đặt, bạn nên đặt nó như chạy một lần khi khởi động và yêu cầu khởi động lại. Để biết thêm thông tin xem bài viết Chỉ chạy một chương trình khi bạn khởi động vào Windows , trong đó yêu cầu một số công việc đăng ký.


harrymc chúng ta đang nói về dll's đã đăng ký
sams

@sams Bạn không đề cập đến những DLL này đã được đăng ký. Những người chỉ áp dụng cho thư viện COM anyways.
Ramhound

@sams: Tôi đã thêm một phần cho các DLL đã đăng ký.
harrymc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.