Windows 7 如何使用Vista/UAC感知的自解压缩安装程序

Windows 7 如何使用Vista/UAC感知的自解压缩安装程序,windows-7,installation,uac,self-extracting,winzip,Windows 7,Installation,Uac,Self Extracting,Winzip,我使用WinZip自解压缩存档(SFX)分发我的软件。 我意识到了这一点。但这些似乎不适用于SFX场景 安装时,SFX解压并启动一个包含的程序(由我编写),该程序执行安装。这包括为windows控制面板下的程序列表创建注册表项。此外,该程序还有一个清单。 所以它应该是“Vista感知的”。SFX可执行文件还包括一个清单 问题是程序兼容性助手(PCA)抛出了它的消息 “此程序可能未正确安装”。 所以我的客户告诉我我是个糟糕的程序员 我在谷歌上搜索了很多,读了很多关于PCA的信息,包括很多微软网站。

我使用WinZip自解压缩存档(SFX)分发我的软件。
我意识到了这一点。但这些似乎不适用于SFX场景

安装时,SFX解压并启动一个包含的程序(由我编写),该程序执行安装。这包括为windows控制面板下的程序列表创建注册表项。此外,该程序还有一个清单。 所以它应该是“Vista感知的”。SFX可执行文件还包括一个清单

问题是程序兼容性助手(PCA)抛出了它的消息
“此程序可能未正确安装”
。 所以我的客户告诉我我是个糟糕的程序员

我在谷歌上搜索了很多,读了很多关于PCA的信息,包括很多微软网站。
这些告诉我要做:

  • 嵌入清单
  • 为windows控制面板下的“程序”列表创建注册表项
  • 我的清单如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <applicationRequestMinimum>
            <defaultAssemblyRequest permissionSetReference="Custom" />
            <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
          </applicationRequestMinimum>
          <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
          </requestedPrivileges>
        </security>
      </trustInfo>
    </asmv1:assembly>
    
    
    
    那么我哪里出错了?
    PCA还有其他事情要做吗?

    SFX可执行文件是否必须包含其他内容?

    NSIS中的类似问题是将PE头中的a设置为6.0。我相信这是针对我们的卸载程序的,但也可能适用于您的场景。

    NSIS中的类似问题是将PE头中的a设置为6.0。我相信这适用于我们的卸载程序,但也可能适用于您的场景。

    正如另一个答案中所述,关键是在文件的PE()部分正确设置标题。我们在尝试使用SFX文件&7-zip构建自解压可执行文件时遇到了这个问题

    可移植可执行文件(PE)格式是32位和64位版本的Windows操作系统中使用的可执行文件、对象代码、DLL、FON字体文件和其他文件的文件格式。PE格式是一种数据结构,它封装了Windows OS加载程序管理包装的可执行代码所需的信息

    注意:文件格式与Linux下类似

    构建这些文件进行得很顺利,但是当我们尝试在Win7上运行生成的文件时,会出现以下对话框

    这里最大的提示是这个对话框是由PCA程序兼容性助手抛出的。引发此错误是因为PCA检测到:

  • 没有向添加/删除程序添加任何条目
  • PE可执行文件的版本字段设置正确
  • 用PE工具固定 在我们的案例中,似乎是#2引起了问题。因此,我们下载并打开了7-zip SFX文件注意:我们加载了文件
    7zS.sfx

    加载后,我们将以下版本信息从
    4
    更改为
    6

    工具书类

    正如另一个答案中所述,关键是在文件的PE()部分正确设置标题。我们在尝试使用SFX文件&7-zip构建自解压可执行文件时遇到了这个问题

    可移植可执行文件(PE)格式是32位和64位版本的Windows操作系统中使用的可执行文件、对象代码、DLL、FON字体文件和其他文件的文件格式。PE格式是一种数据结构,它封装了Windows OS加载程序管理包装的可执行代码所需的信息

    注意:文件格式与Linux下类似

    构建这些文件进行得很顺利,但是当我们尝试在Win7上运行生成的文件时,会出现以下对话框

    这里最大的提示是这个对话框是由PCA程序兼容性助手抛出的。引发此错误是因为PCA检测到:

  • 没有向添加/删除程序添加任何条目
  • PE可执行文件的版本字段设置正确
  • 用PE工具固定 在我们的案例中,似乎是#2引起了问题。因此,我们下载并打开了7-zip SFX文件注意:我们加载了文件
    7zS.sfx

    加载后,我们将以下版本信息从
    4
    更改为
    6

    工具书类

    SFX是否要求提升?它是否有
    setup.exe
    名称?上面的清单是您的安装程序还是SFX?是的,SFX要求提升安装权限,并且名称中包含“setup”。上面的清单是我自己的,SFX也包含清单,但我不知道如何更改它。您确定SFX中的清单具有requestedExecutionLevel吗?如果有,则不应显示兼容性对话框。是的,SFX清单包含requestedExecutionLevel,level=“requireAdministrator”。不管怎样,对话框还是出现了。我认为PCA会在windows控制面板/程序中查找创建的条目,该条目不是由SFX编写的。问题是,当应用程序具有声明的requestedExecutionLevel的清单时,PCA不会应用。仅对没有清单的应用程序执行安装程序检测。所以肯定少了些什么。此外,您可以通过清单声明您的应用程序与Vista/7兼容。SFX是否请求提升?它是否有
    setup.exe
    名称?上面的清单是您的安装程序还是SFX?是的,SFX要求提升安装权限,并且名称中包含“setup”。上面的清单是我自己的,SFX也包含清单,但我不知道如何更改它。您确定SFX中的清单具有requestedExecutionLevel吗?如果有,则不应显示兼容性对话框。是的,SFX清单包含requestedExecutionLevel,level=“requireAdministrator”。不管怎样,对话框还是出现了。我认为PCA会在windows控制面板/程序中查找创建的条目