安装ClickOnce已发布的DPI感知应用程序

时间:2012-01-14 19:12:32

标签: visual-studio-2010 clickonce

我有一个让我发疯的问题。

我使用visual studio 2010专业版。我以Microsoft显示here的方式创建了dpi感知应用程序,通常会向包含此内容的应用程序添加清单:

<?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异常。此异常表示“设备无法正常运行”。好但是什么设备?。

谷歌的研究表明,我所得到的那种错误可能与不正确地签署程序集有关。我花了几个小时试图解决这个问题,以各种方式签署集会但没有成功。

我发现只要注释掉整个<windowsSettings>标记就足够了,然后应用程序安装得很好,即使没有任何程序集签名也是如此。我想知道它是否与事实有关,当你在Web浏览器中在该标签的xmlns属性中键入该URL时,服务器会响应“处理您的请求时出错”。消息。

有人可以帮忙吗?我在win7,win7 64和winxp的几台机器上试过这个,每次我得到相同的结果......我想知道为什么google没有显示任何相关内容。我是唯一一个尝试安装ClickOnce发布的dpi感知应用程序的人吗?

1 个答案:

答案 0 :(得分:2)

只需从代码中启用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,它应该通过单击一次发布向导来创建。