Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >可执行文件名中包含 install 或 setup

可执行文件名中包含 install 或 setup

作者头像
零式的天空
发布于 2022-03-28 11:31:53
发布于 2022-03-28 11:31:53
74300
代码可运行
举报
文章被收录于专栏:零域Blog零域Blog
运行总次数:0
代码可运行

问题描述

Windows Vista+ 系统下,若 EXE 文件名中包含有「install」、「update」或「setup」等字样,可能出现如下问题:

  1. 每次软件运行完退出后会弹出「程序兼容性助手」(Program Compatibility Assistant, 简称 PCA),提示软件未正确安装。
  2. 在 Vista+ 的操作系统下任务栏右键该程序缺少「将此程序锁定到任务栏」和软件名同名项。 | 程序名 | 运行时任务栏右键 | |—————-|———————————————————| | a.exe |

| | setup.exe |

|

  1. 你的程序没打算要求管理员权限的,但是运行的时候却弹 UAC 了。 完全相同的两个 EXE 文件,名字不一样:

问题分析

简而言之,上述现象发生的原因是 Windows Vista+ 系统的「安装程序检测」机制认为文件名中包含「install」、「update」或「setup」等字样,且没有在 Manifest 文件中显式指定 requestedExecutionLevel 的 32 位可执行程序是安装包,会主动为安装包弹出 UAC 提权申请,而「程序兼容性助手」会监控安装包的执行情况,如果它没有在「添加或删除程序」中创建一个条目,那「程序兼容性助手」会认为该安装包没有成功完成,在安装包结束后即弹出「程序兼容性助手」提示用户该程序可能安装不正确。

MSDN 关于「程序兼容性助手」的相关问答:

  1. What is the detection logic, and how does PCA know that the setup failed due to version problems? PCA does not specifically look for the setup’s failing due to version problems. The logic used by PCA is to detect if a setup did not complete successfully. It monitors a program detected as setup by Windows Vista and Windows Server 2008 and checks whether the program registers an entry in Add or Remove Programs (ARP). If no entries are created in ARP, PCA concludes that the installer did not complete successfully. It will then wait for the install program to terminate before displaying the UI. If it is an uninstaller, the detection looks for whether an entry was deleted from ARP.
  2. How does PCA get information about the setup programs? PCA relies on the User Account Control (UAC) feature in Windows Vista and Windows Server 2008 to know whether a program is a setup program. UAC includes detection for setup programs and will make sure the detected setup programs will be run as Administrator, which includes getting administrative credentials or confirmation from the user before launching the program.

原文链接:Application Compatibility: Program Compatibility Assistant (PCA)

MSDN 关于「安装程序检测」的相关介绍:

Installer Detection only applies to:

  • 32 bit executables
  • Applications without a requestedExecutionLevel
  • Interactive processes running as a Standard User with UAC enabled

Before a 32 bit process is created, the following attributes are checked to determine whether it is an installer:

  • Filename includes keywords like “install,” “setup,” “update,” etc.
  • Keywords in the following Versioning Resource fields: Vendor, Company Name, Product Name, File Description, Original Filename, Internal Name, and Export Name
  • Keywords in the side-by-side application manifest embedded in the executable
  • Keywords in specific StringTable entries linked in the executable
  • Key attributes in the resource file data linked in the executable
  • Targeted sequences of bytes within the executable

原文链接:New UAC Technologies for Windows Vista.aspx)

另外,微软的一个 PPT 介绍了「安装程序检测」和它可能产生的误判,以及解决的办法,给出的方案是内嵌 Manifest 或者外置一个名为「MyApp.exe.manifest」的文件:

参考:

解决方案

问题 1:

如下三项任选其一:

一、给程序改个名字,不要包含「install」、「update」和「setup」字样。

二、为可执行文件添加类似如下的 Manifest 文件,指定程序兼容 Win7 与 Vista(或更高版本的当前系统)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <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>

三、程序运行时在注册表项 HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted 下写入以可执行文件全路径为名,值为 REG_DWORD 类型的 1 的项。

问题 2 和 3:

这是 Windows Vista+ 系统对「安装包」的「特殊待遇」,如果你正在做安装包,那你应该不在乎这些;如果你正在做的不是「安装包」,那么将程序改名吧!去掉 install,去掉 update,去掉 setup,世界从此清净了。

结论

  1. 如果你正在做的是安装包,那么遵循 Windows Vista+ 系统对安装包的一致规范,主动要求以管理员权限执行,并在安装任务成功完成后在「添加或删除程序」里添加新的条目。
  2. 如果不是在做安装包,那么将程序改名能避免 Windows Vista+ 系统的误判导致的问题。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
正确处理安装程序提示 “这个程序可能安装不正确” 问题
通过上面的几个资料我分别查询了一下 .manifest 文件的作用,以及如何在 Visual Studio 中生成和使用 .manifest 文件。资料如下:
我与梦想有个约会
2023/10/21
3810
正确处理安装程序提示 “这个程序可能安装不正确” 问题
正确处理安装程序提示 “这个程序可能安装不正确” 问题
最近公司在赶一个项目,打包完成的安装包安装完成后会有一个报错,如下图: 复现问题 出现该问题的详细环境如下(也就是一个复现问题的步骤): 开启了 Windows 兼容性助手的服务 Program Co
我与梦想有个约会
2018/07/02
1.6K0
如何创建应用程序清单文件 App.Manifest,如何创建不带清单的应用程序
如果你的程序对 Windows 运行权限有要求,那么需要设置应用程序清单。本文介绍如何添加应用程序清单,并解释其中各项权限设置的实际效果。
walterlv
2023/10/22
1.3K0
如何创建应用程序清单文件 App.Manifest,如何创建不带清单的应用程序
C# 控制台使用 UAC 权限
本文告诉大家如何在 C# 控制台项目使用 UAC 权限。这个方法在 WPF 和 控制台都是可以使用。
林德熙
2018/09/19
1.5K0
C# 控制台使用 UAC 权限
Manjaro Linux平台用pyinstaller打包python可执行文件
当我们创建一个python项目,最终的成果如果希望用户能够不依赖于python源代码也能够正常的执行,就会比较的人性化。因为源代码数量众多,很难让每个用户都自行管理所有的源代码,因此我们需要对源码进行编译构建。对于使用场景不是很复杂的,我们可以直接做成一个可执行文件,这样开发者只需要维护可执行文件的功能正常,以及对于各种平台的兼容性较好,这就可以了。这里我们介绍如何使用pyinstaller去通过python源码构造一个可执行文件。
不知名站长
2021/04/01
2.9K0
python 脚本生成为可执行文件
你会发现dist下面只有一个可执行文件,这个单文件就可以发布了,可以运行在你正在使用的操作系统类似的系统的下面。
Devops海洋的渔夫
2019/05/30
1.4K0
使用CefSharp开发一个12306“安心刷票弹窗通知”工具
有需求就要改进 最近两年没有在春节回家过年了,主要是票太难买,虽然之前写了一个12306“无声购票弹窗”工具,解决了抢票问题,但是全家老小一起回去还是很累,干脆就在北京过年了。这两天突然有一个朋友问我你之前的抢票工具还能用不,我让他试试,他说可以,于是我觉得这样一个小工具居然还有人继续使用啊,既然有人用我就继续把他做好点,让大家过年抢票更“安心”! 之前的抢票工具是基于IEBrowser控件做的,不用说大家都知道这个控件在不同的Windows系统上表现各异,因为它主要依赖于IE内核,坑爹的是它有时候还没有直
用户1177503
2018/02/27
3.3K0
使用CefSharp开发一个12306“安心刷票弹窗通知”工具
修改nw.js的exe文件使其请求管理员权限
默认情况下,nw.js发布的nw.exe文件请求的是普通权限,当我们的应用需要访问一些特殊目录或者注册表等,就需要程序启动的时候以管理员权限运行。那么此时如何去修改nw.exe,使其启动的时候请求admin权限呢? 首先我们找一款使用nw.js开发的软件,这里我推荐AxeSlide,首先去下载软件,安装。 如果我们软件安装之后,使用的是非Administrator用户登录的话,启动软件的时候,就会弹出UAC提升框,提醒我们该软件请求以管理员身份运行,是否同意。那么AxeSlide是如何做到的呢? 找一款PE
用户1631416
2018/04/11
2.6K0
[Azure DevOps] 使用 Inno Setup 制作桌面软件安装包
桌面应用程序的 CI/CD 过程和网站有一些不同,毕竟桌面应用程序的“部署”只是将安装包分发到目标位置,连应用商店都不用上,根据公司的管理流程可以很复杂,也可以很简单。在简单的情况下,Azure Pipelines 中一个桌面应用(WPF)的 CI/CD 过程如下:
dino.c
2021/06/21
2.4K0
[Azure DevOps] 使用 Inno Setup 制作桌面软件安装包
WPF 引用 UWP 控件 不打包为 MSIX 分发的方法
按照微软的官方文档,大部分的文档都会说如果用了 XAML Islands 等技术的时候,需要新建一个打包项目,将 WPF 应用打包为 msix 等才可以进行分发和使用。但是实际上不打包也可以,此时可以和此前的 Win32 应用一样的分发方式进行分发,可以支持到 Win7 系统,当然了在 Win7 系统上可用不了 UWP 的控件,但是至少应用软件自身可以在 Win7 继续运行的。可以通过判断系统版本决定功能是否开放,如是 Win10 版本,那么开放 UWP 控件部分的使用
林德熙
2021/12/23
7840
『Python』Python编译成计算机可执行文件(Windows计算机可执行文件exe,Linux 计算机可执行文件elf,Mac计算机可执行文件mach-O)
Python 程序都是脚本的方式,一般是在解析器里运行,如果要想要给别的计算机使用,需要提前安装Python解析器和相关包才可以运行,为了在 Windows(或其它系统里) 里方便发布,我们将.py文件,编译成一个可执行文件,并且打包所需要库文件,只需要点击一个可执行文件运行,而无需安装Python和相关库文件。这样发布给用户使用何不美哉。
风骨散人Chiam
2020/10/28
3.6K0
使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件
Exe4j 是一款用于将 Java 应用程序打包为 Windows 平台上可执行文件(.exe)的工具。无论是服务器端、GUI 程序还是命令行应用,都可以通过 exe4j 生成独立的 EXE 文件。此外,exe4j 还可以:
九转成圣
2024/11/29
5580
使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件
pyinstaller
PyInstaller 可以将 python 程序打包成一个单一的 exe 可执行包
franket
2021/08/12
2.4K0
在 Windows 系统上降低 UAC 权限运行程序(从管理员权限降权到普通用户权限)
在 Windows 系统中,管理员权限和非管理员权限运行的程序之间不能使用 Windows 提供的通信机制进行通信。对于部分文件夹(ProgramData),管理员权限创建的文件是不能以非管理员权限修改和删除的。
walterlv
2023/10/23
2.1K0
【IntelliJ IDEA】使用 exe4j 生成 jre + jar 可执行文件并在 Windows 上执行 ( 不安装 jre 执行 java 程序 )
使用 exe4j 生成 jre + jar 可执行文件的本质就是在外面包裹了一层 C/C++ 程序 , 在该程序中 , 执行 system 系统调用 , 调用 jre 目录下的 java 命令 , 执行 jar 文件 , 也可以自己实现 ;
韩曙亮
2023/03/29
2.3K1
【IntelliJ IDEA】使用 exe4j 生成 jre + jar 可执行文件并在 Windows 上执行 ( 不安装 jre 执行 java 程序 )
第三方工具命令行过滤计划任务,比系统自带的命令要精细
#http://www.nirsoft.net/utils/task_scheduler_view.html
Windows技术交流
2023/12/04
6510
如何验证可执行文件是可靠的 | Windows 应急响应
相信部分朋友已经看过我们的 《Windows 应急响应手册》了,我们这边也得到部分朋友的正向反馈,包括工具、方法等。
意大利的猫
2024/03/04
4020
如何验证可执行文件是可靠的 | Windows 应急响应
Windows Developer Day - MSIX and Advanced Installer
前面一篇我们介绍了 Adaptive Cards 的基础知识,而在 Windows Developer Day 的 Modern Application Experience 环节,还有一个需要划重点
Shao Meng
2018/04/28
2.1K0
Windows Developer Day - MSIX and Advanced Installer
聊聊各种操作系统都在使用什么样的格式来存储可执行文件及目标文件
首先,非常抱歉本公众号断更了很长一段时间,其实这段时间已经积累了不少写作素材,但由于工作上一直比较忙,没有大段的时间可以整理出来,所以就一直耽搁到了现在。
KINGYT
2020/06/09
8990
java生成exe可执行文件的条件_不能运行exe文件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/02
3.1K0
java生成exe可执行文件的条件_不能运行exe文件
推荐阅读
正确处理安装程序提示 “这个程序可能安装不正确” 问题
3810
正确处理安装程序提示 “这个程序可能安装不正确” 问题
1.6K0
如何创建应用程序清单文件 App.Manifest,如何创建不带清单的应用程序
1.3K0
C# 控制台使用 UAC 权限
1.5K0
Manjaro Linux平台用pyinstaller打包python可执行文件
2.9K0
python 脚本生成为可执行文件
1.4K0
使用CefSharp开发一个12306“安心刷票弹窗通知”工具
3.3K0
修改nw.js的exe文件使其请求管理员权限
2.6K0
[Azure DevOps] 使用 Inno Setup 制作桌面软件安装包
2.4K0
WPF 引用 UWP 控件 不打包为 MSIX 分发的方法
7840
『Python』Python编译成计算机可执行文件(Windows计算机可执行文件exe,Linux 计算机可执行文件elf,Mac计算机可执行文件mach-O)
3.6K0
使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件
5580
pyinstaller
2.4K0
在 Windows 系统上降低 UAC 权限运行程序(从管理员权限降权到普通用户权限)
2.1K0
【IntelliJ IDEA】使用 exe4j 生成 jre + jar 可执行文件并在 Windows 上执行 ( 不安装 jre 执行 java 程序 )
2.3K1
第三方工具命令行过滤计划任务,比系统自带的命令要精细
6510
如何验证可执行文件是可靠的 | Windows 应急响应
4020
Windows Developer Day - MSIX and Advanced Installer
2.1K0
聊聊各种操作系统都在使用什么样的格式来存储可执行文件及目标文件
8990
java生成exe可执行文件的条件_不能运行exe文件
3.1K0
相关推荐
正确处理安装程序提示 “这个程序可能安装不正确” 问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验