2011-01-21 9 views
15

Có ai có ví dụ về tệp kê khai cho Delphi 7 cho phép ứng dụng chạy với tư cách quản trị viên trên Windows XP/Vista/7 không?Delphi 7 vista/windows 7 manifest

Chạy một ứng dụng có tính năng này thường dẫn đến hộp thoại User Account Control (UAC) yêu cầu quyền ưu tiên.

+4

Sử dụng 'cao nhất có sẵn', theo đề xuất của Cosmin và Sigurdur, kết quả trong chương trình khởi động mà không có quyền quản trị nếu người dùng không phải là quản trị viên. Nếu ứng dụng của bạn chỉ có thể làm công việc hữu ích nếu nó chạy với quyền quản trị thì bạn nên sử dụng 'requireAdministrator' thay thế. Trong trường hợp người dùng là quản trị viên thì hộp thoại độ cao phê duyệt UAC sẽ hiển thị. Trong trường hợp người dùng là người dùng chuẩn thì hộp thoại nâng cao UAC "over-the-vai" sẽ hiển thị. –

+0

Ngoài ra, bạn đề cập đến XP nhưng tôi không tin rằng bạn có thể hiển thị các vấn đề về quyền quản trị. Trên XP, nếu bạn muốn một người dùng chuẩn chạy một ứng dụng với tư cách quản trị viên thì tôi tin rằng bạn cần sử dụng 'RunAs'. –

+0

Bạn có thể tìm thấy giải pháp tự động trong ** [this] (http://www.delphifeeds.com/go/f/80334?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:%20delphifeeds%20%28DelphiFeeds.com%29) * * bài báo. – avra

Trả lời

2

này hoạt động tốt đối với tôi:

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

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
      type="win32" 
      name="Microsoft.Windows.Common-Controls" 
      version="6.0.0.0" 
      publicKeyToken="6595b64144ccf1df" 
      language="*" 
      processorArchitecture="x86" 
     /> 
    </dependentAssembly> 
    </dependency> 

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

</assembly> 
6

Dưới đây là một số liên kết thông tin

Vista UI mainfest

Delphi and Windows Vista User Account Control

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

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
     type="win32" 
     name="Microsoft.Windows.Common-Controls" 
     version="6.0.0.0" 
     publicKeyToken="6595b64144ccf1df" 
     language="*" 
     processorArchitecture="x86" /> 
    </dependentAssembly> 
    </dependency> 

    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel 
      level="highestAvailable"/> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 
+0

Bạn bao gồm nó bằng cách thêm tệp rc với 1 24 "ExecutionLevelHighestAvailable.manifest" – Sigurdur

+0

Chỉ cần nhớ để loại bỏ việc sử dụng 'XPMan' từ tất cả các đơn vị của dự án. – Isaac

+0

Ngoài ra, thay đổi bộ vi xử lýArchitecture "x86" thành "*" để hỗ trợ nền tảng 64 bit – PatrickvL

21

Sau đây là các bước sau:

1. Remove XPMan: Hủy bỏ bất kỳ tham chiếu đến XPMan thành phần trong dự án của bạn. XPMan thêm tệp kê khai mặc định vào tệp thực thi để ngăn Windows xem biểu hiện được tùy chỉnh của chúng tôi. Bạn không nên lo lắng về Chủ đề XP được cung cấp bởi XPMan, hỗ trợ chủ đề được giữ nguyên trong tệp kê khai sau.

2. Tạo tệp kê khai tùy chỉnh: Tạo tệp như Win7UAC.manifest trong thư mục dự án (tên tệp thực sự không quan trọng). thêm các dòng sau vào Win7UAC.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity type="win32" name="App" version="3.1.0.0" processorArchitecture="*"/> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/> 
    </dependentAssembly> 
    </dependency> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
     <!--The ID below indicates application support for Windows Vista --> 
     <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
     <!--The ID below indicates application support for Windows 7 --> 
     <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> 
    </application> 
    </compatibility> 
</assembly> 

Bạn có thể thêm các mục khác vào tệp kê khai này. Bạn cũng có thể xóa Microsoft.Windows.Common-Controls các phần để tắt hỗ trợ chủ đề.

3. Biên soạn manifest tới một tài nguyên: Tạo một file có tên Win7UAC.rc trong thư mục dự án có chứa một dòng như:

1 24 "Win7UAC.manifest" 

Để biên soạn tệp này, hãy vào cmd, điểm đến dự án thư mục và chạy lệnh sau:

brcc32.exe Win7UAC.rc 

4. Thêm tài nguyên (manifest) cho dự án: Chỉ cần thêm dòng sau bất cứ nơi nào bạn muốn trong một trong các tập tin đơn vị của dự án:

{$R 'Win7UAC.res'} 

Một nơi thích hợp cho việc thêm dòng này là trong tập tin chính dự án (thường là tên Project1.dpr) và dưới dòng {$R *.res}.

5. Rebuild dự án

6. Ghi bất cứ khi nào bạn thêm phần XPMan để bất kỳ của các đơn vị dự án, biểu hiện UAC này sẽ không hoạt động đúng.

+2

tôi sẽ tiết kiệm thời gian tìm kiếm cho bạn ... < id được hỗ trợ = "{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" /> {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} cho Windows 8: Ứng dụng đặt giá trị này trong tệp kê khai ứng dụng nhận hành vi Windows 8 – Rebelss

+0

Sau khi làm theo tất cả các hướng dẫn này, tôi nhận được lỗi này khi cố gắng biên dịch dự án của tôi, bất kỳ ý tưởng nào? "[Lỗi DCC] E2161 Cảnh báo: Tài nguyên trùng lặp: Loại 24 (do người dùng xác định), ID 1; Tệp tài nguyên myproject.res được lưu giữ; tệp tài nguyên Win7UAC.res bị loại bỏ." – delphirules

+0

@ delphirules: Tôi đã không thử điều này trong một thời gian. Bạn có chắc là bạn đã thực hiện tất cả các bước một cách chính xác? Hãy cho tôi biết nếu bạn vẫn gặp bất kỳ rắc rối nào. Tôi có thể chụp được một máy ảo Win7 VMWare và thử. – Isaac

2

Sử dụng Delphi XE, tôi phải bỏ chọn 'Bật chủ đề thời gian chạy' trong 'Dự án' -> 'Tùy chọn' -> tab 'Ứng dụng' để làm việc này.

Chỉnh sửa: xin lỗi, có vẻ như đã hoạt động với tùy chọn này được bật.

+0

Trong trường hợp của tôi sử dụng Embarcadero C++ Builder XE, tôi đã phải bỏ chọn tùy chọn đó để làm việc. – ruhalde