Lỗi hiển thị Opera PMS trên máy tính có độ phân giải cao

Trên một số dòng laptop/desktop có độ phân giải màn hình cao, phần mềm Opera sẽ bị lỗi hiển thị như hình trên. Tôi cũng đã cố hỏi Oracle nhưng họ từ chối hỗ trợ, vì đây là lỗi hiển thị chỉ trên một số máy trạm. Vậy cần fix lỗi này như thế nào?

Cơ sở lý thuyết

Trước tiên, bạn cần làm quen với khái niệm manifest trên Windows.

Manifest là một tệp XML có chứa các cài đặt thông báo cho Windows cách xử lý một chương trình khi nó được khởi động. Tệp manifest có thể được nhúng bên trong tệp chương trình (dưới dạng tài nguyên) hoặc nó có thể được đặt trong tệp XML bên ngoài riêng biệt. Nếu tệp manifest được đặt riêng biệt, thì nó đặt trong cùng thư mục với tệp EXE, cùng tên và phần mở rộng “.manifest” ở cuối (ví dụ: “MYAPP.EXE.manifest”).

Các tệp manifest cũng có thể được sử dụng với các tệp thư viện (chẳng hạn như tệp DLL), nhưng để fix lỗi này chúng ta chỉ cần sử dụng tệp chương trình (tệp EXE).

Lỗi này chính là do trình duyệt Internet Explorer khi chạy Opera không hiểu những mức hiển thị cao. Vậy nên chúng ta cần phải cưỡng chế làm cho IE hiểu được bằng cách dùng một tệp manifest.

Nội dung tệp tin mafinest bao gồm các element (phần tử) và các atribute (thuộc tính). Chi tiết nó thế nào bạn vui lòng xem trên trang Microsoft theo link ở mục tham khảo bên dưới bài viết.

Xây dựng nội dung tập tin iexplore.exe.manifest

Dưới đây là nội dung tập tin iexplore.exe.manifest mà tôi đã xây dựng, bạn hãy copy nó về, mở notepad dán nó vào và đặt tên nó là iexplore.exe.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">

<dependency>
  <dependentAssembly>
    <assemblyIdentity
      type="win32"
      name="Microsoft.Windows.Common-Controls"
      version="6.0.0.0" processorArchitecture="*"
      publicKeyToken="6595b64144ccf1df"
      language="*">
    </assemblyIdentity>
  </dependentAssembly>
</dependency>

<dependency>
  <dependentAssembly>
    <assemblyIdentity
      type="win32"
      name="Microsoft.VC90.CRT"
      version="9.0.21022.8"
      processorArchitecture="amd64"
      publicKeyToken="1fc8b3b9a1e18e3b">
    </assemblyIdentity>
  </dependentAssembly>
</dependency>

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel
        level="asInvoker"
        uiAccess="false"/>
    </requestedPrivileges>
  </security>
</trustInfo>

<asmv3:application>
  <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
    <ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware>
  </asmv3:windowsSettings>
</asmv3:application>

</assembly>

Sau khi đã có tập tin iexplore.exe.manifest. Bạn hãy copy nó vào thư mục: “C:\Program Files\internet explorer” và “C:\Program Files (x86)\Internet Explorer”

Khai báo PreferExternalManifest

Để gọi được các tập tin manifest hoạt động, bạn cần thực hiện khai báo khóa PreferExternalManifest trong registry như sau:

  1. Mở regedit
  2. Tìm vào thư mục theo đường dẫn sau: HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows > CurrentVersion> SideBySide
  3. Chuột phải và tạo file DWORD ( 32 Bit )
  4. Đặt tên File là PreferExternalManifest
  5. Chuột Phải và chọn Modify
  6. Thay đổi giá trị của biến thành 1 và kiểu số Decimal.
  7. OK, thoát Regedit và restart máy tính.

Kết luận

Trên đây là hướng xử lý đối với lỗi hiển thị trên Opera. Phương pháp này cũng được sử dụng cho các ứng dụng khác như Zalo, Netbeans…. Bạn hãy tìm thư mục cài đặt các phần mềm này và đặt tên tệp tin manifest theo đúng định dạng nhé.

Chúc bạn thành công!

Tham khảo

[1] https://docs.microsoft.com/en-us/windows/win32/sbscs/application-manifests

[2] https://www.samlogic.net/articles/manifest.htm

Leave a Comment