如何使用Vista / UAC识别自解压安装程序

时间:2012-02-10 14:48:50

标签: windows-7 installer uac self-extracting winzip

我使用WinZip自解压存档(SFX)分发我的软件 我知道thisthat。但这些似乎不适用于SFX场景。

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

问题是程序兼容性助手(PCA)会抛出其消息 "This program might not have installed correctly"无论如何。 所以我的客户告诉我,我是一个糟糕的程序员......

我搜索了很多,并阅读了很多关于PCA的信息,包括许多微软网站 那些告诉我这样做:

  1. 嵌入清单
  2. 在Windows控制面板下为程序列表创建注册表项
  3. 我的清单看起来像这样:

    <?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可执行文件是否必须包含其他一些内容?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

  

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

注意: PE文件格式类似于Linux下的ELF

构建这些文件的过程非常顺利,但是当我们尝试在Win7上运行生成的文件时,我们会得到以下对话框。

ss #1

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

  1. “添加/删除程序”中未添加任何条目
  2. 正确设置了PE exectuable的Version字段
  3. 使用PE工具修复

    在我们的案例中,似乎#2 导致了这个问题。所以我们下载了PE Tools并打开了7-zip SFX文件。 注意:我们加载了文件7zS.sfx

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

    ss #2

    参考