Установка опубликованного ClickOnce опубликованного приложения с поддержкой DPI - PullRequest
5 голосов
/ 14 января 2012

У меня проблема, которая сводит меня с ума.

Я использую Visual Studio 2010 Professional.Я создаю приложение с поддержкой dpi так, как Microsoft показала здесь , что в целом добавляет манифест к приложению, содержащему это:

<?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>

Затем я публикую свое приложение и япопробуйте установить его.Полный провал.Во время установки выскакивает окно с сообщением о том, что приложение неправильно отформатировано (это перевод, я использую польскую версию операционной системы).Журнал ошибок показывает, что при создании манифеста возникла исключительная ситуация HRESULT 0x8007001f.Это исключение означает, что «устройство не работает».Отлично, но какое устройство?.

Исследования Google показали, что такая ошибка, которую я получил, может быть связана с неправильным подписанием сборки.Я потратил несколько часов, пытаясь решить эту проблему, чтобы подписать сборку разными способами, но безуспешно.

То, что я обнаружил, достаточно закомментировать целый тег <windowsSettings>, и тогда приложение будет хорошо установлено, даже без подписи сборки.Интересно, имеет ли это какое-то отношение к тому факту, что когда вы набираете этот URL в атрибуте xmlns этого тега в веб-браузере, то сервер отвечает «Ошибка при обработке вашего запроса».сообщение.

Может кто-нибудь помочь?Я пробовал это на нескольких машинах с win7, win7 64 и winxp на них, и каждый раз я получаю один и тот же результат ... Интересно, почему Google ничего не показывает по этому поводу.Я единственный, кто пытается установить опубликованное приложение ClickOnce с поддержкой dpi?

1 Ответ

2 голосов
/ 18 апреля 2014

Просто включите DPI с учетом кода. Примерно так:

[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);
    ...

И удалите app.manifest, он должен быть создан одним щелчком мыши в мастере публикации.

...