2012-01-14 36 views
5

Tôi gặp vấn đề khiến tôi phát điên.Cài đặt ClickOnce xuất bản ứng dụng nhận thức DPI

Tôi sử dụng studio chuyên nghiệp 2010. Tôi tạo ra các ứng dụng dpi-aware trong cách mà Microsoft cho thấy here, đó là nói chung thêm một biểu hiện cho các ứng dụng có chứa này:

<?xml version="1.0" encoding="utf-8"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > 
    <asmv3:application> 
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> 
     <dpiAware>true</dpiAware> 
    </asmv3:windowsSettings> 
    </asmv3:application> 
</assembly> 

Sau đó, tôi xuất bản ứng dụng của tôi và tôi cố gắng để cài đặt nó. Hoàn toàn thất bại. Trong cửa sổ lỗi cài đặt hiện ra rằng ứng dụng không được định dạng đúng (đây là bản dịch, tôi sử dụng phiên bản hệ điều hành của Ba Lan). Nhật ký lỗi cho thấy có ngoại lệ HRESULT 0x8007001f trong quá trình tạo tệp kê khai. Ngoại lệ này có nghĩa là "thiết bị không hoạt động". Tuyệt vời nhưng thiết bị nào ?.

Nghiên cứu của Google cho rằng loại lỗi mà tôi gặp phải có thể có liên quan đến việc ký hợp đồng không đúng. Tôi đã dành vài giờ cố gắng để giải quyết sự ràng buộc này để ký kết hội đồng theo nhiều cách khác nhau mà không thành công.

Tôi đã nhận thấy rằng nó đủ để nhận xét toàn bộ thẻ <windowsSettings> và sau đó ứng dụng sẽ cài đặt tốt, ngay cả khi không có bất kỳ ký kết lắp ráp nào cả. Tôi tự hỏi nếu nó có someting để làm với thực tế, rằng khi bạn gõ url đó trong thuộc tính xmlns của thẻ đó trong trình duyệt web sau đó máy chủ respons với "Một lỗi xảy ra trong khi xử lý yêu cầu của bạn." thông điệp.

Ai đó có thể trợ giúp? Tôi đã thử điều này trên một số máy với win7, win7 64 và winxp vào chúng và mỗi lần tôi nhận được kết quả tương tự ... Tôi tự hỏi tại sao google không hiển thị bất cứ điều gì về điều này. Tôi có phải là người duy nhất cố cài đặt ứng dụng nhận biết dpi của ClickOnce không?

Trả lời

2

Chỉ cần bật DPI nhận biết từ mã. Một cái gì đó như thế này:

[System.Runtime.InteropServices.DllImport("user32.dll")] 
private static extern bool SetProcessDPIAware(); 

[STAThread] 
static void Main() 
{  
    if (Environment.OSVersion.Version.Major >= 6) SetProcessDPIAware(); 

    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    ... 

Và xóa ứng dụng.manifest, nó phải được tạo bởi trình hướng dẫn nhấp một lần xuất bản.

Các vấn đề liên quan