正确处理安装程序提示 “这个程序可能安装不正确” 问题

最近公司在赶一个项目,打包完成的安装包安装完成后会有一个报错,如下图:

复现问题

出现该问题的详细环境如下(也就是一个复现问题的步骤):

  • 开启了 Windows 兼容性助手的服务 Program Compatibility Assistant Service
  • 使用 IE 浏览器下载直接运行的程序(可能与 IE 的 SmartScreen 筛选器有关)
  • 安装程序带有 setup 关键字

用以上环境下载并安装程序后,就会有上面的提示。

解决思路

搜索了相关资料,有几个关联的资料分别记录在这里:

解决步骤

通过上面的几个资料我分别查询了一下 .manifest 文件的作用,以及如何在 Visual Studio 中生成和使用 .manifest 文件。资料如下:

首先通过 Visual Studio 打开你的项目属性,连接器->清单文件,将 生成清单 设置为是:

然后打开 清单工具->输入和输入和输出,将 嵌入清单 改为 ,此时下面的输出清单文件会自动填充一个路径,程序编译后就会在这个路径下生成一个以应用程序名字命名的清单文件。如下图:

修改完成保存后,编译一下程序(注意别编译错了版本,我修改了 release 版本的去编译 debug 版本的,搞了半天也没生成,实际是生成错了)。编译完成后,在 exe 生成的目录下就会出现一个以 .manifest 后缀结尾的文件,用记事本打开默认的文件内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

根据 Targeting your application for Windows 的介绍,我们增加一些支持的系统版本,修改完成后如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
      <!-- Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <!-- Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!-- Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application>
  </compatibility>
</assembly>

此时清单文件我们准备好了,需要把这个清单文件嵌入到应用程序中,此时再次打开 清单工具->输入和输入和输出,将 嵌入清单 改为 ,这时 输出清单文件 会被清空,我们在上面的 附加清单文件 中添加我们刚才生成好的清单文件,用宏路径可以这样写 $(TargetPath).manifest,如下图:

添加完成后,再次编译程序,清单文件就会嵌入到程序中了,此时我们再将程序部署到线上环境提供下载后,就不会出现文章开头说明的问题了。

Post Views: 230

相关

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jerry的SAP技术分享

如何在ubuntu上安装virtualbox的driver module vboxdrv

干净的ubuntu安装完毕之后是没有vboxdrv这个driver module的。

3694
来自专栏主机笔记

安装serverstatus监控多台服务器状态

如果是一台服务器很好管理,但是服务器多了,就很容易忘记,因此就需要一个监控的平台。serverstatus是一个开源的服务器监控系统,可以利用serversta...

6637
来自专栏PhpZendo

Apache Kafka 在 Windows 系统上设置与运行教程

手把手教你在 Windows 系统安装运行 Apache Zookeeper 和 Apache Kafka 服务。

1452
来自专栏desperate633

设计模式之外观模式(Facade Pattern)外观模式的优缺点

外观模式外部访问内部复杂代码的一个接口,举个例子,我们知道打开一台电脑很简单,只要按开机键,但实际上在后台我们看不到的地方,计算机进行了很多复杂的工作,比如,c...

963
来自专栏Web项目聚集地

Linux养成计划(五)

非必需时尽量少用root用户登陆,因为它是系统的超级管理员,这里的系统管理员root和Windows中的administrator还不一样,Linux中的roo...

1121
来自专栏名山丶深处

windows平台安装maven

1546
来自专栏沈唁志

解决 fsockopen() 报错 unable to connect to 的方法

这个问题出现在使用 Xunsearch 的时候,Xunsearch 是一个高性能、全功能的全文检索解决方案,旨在帮助一般开发者针对既有的海量数据,快速而方便地建...

3573
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Flask和Python 3编写Slash命令

Slack是团队的沟通平台。Slack有许多附加组件,可以让团队扩展Slack,并将其与其他程序集成。slash命令是在消息输入框中执行操作的快捷方式。例如,键...

1014
来自专栏北京马哥教育

原创投稿 | Zabbix的编译安装并发送通知邮件

1.写在前面 本文主要介绍的是zabbix的编译安装过程,包含它的基础环境LNMP,虽然zabbix官方一般推荐的环境是LAMP。以及实现简单的监控任务,在发...

3808
来自专栏开源优测

linux下安装部署jenkins

环境搭建(linuxs版本) 一、安装包下载地址 注:笔者以64位为例 1、JDK安装包: http://www.oracle.com/technetwork/...

2915

扫码关注云+社区