我使用WinZip自解压存档(SFX)分发我的软件 我知道this和that。但这些似乎不适用于SFX场景。
安装时,SFX解压缩并启动一个包含的程序(由我编写),用于安装。这包括在Windows控制面板下为程序列表创建注册表项。此外,该程序有一个清单。 所以应该是“Vista-aware”。 SFX可执行文件还包括清单。
问题是程序兼容性助手(PCA)会抛出其消息
"This program might not have installed correctly"
无论如何。
所以我的客户告诉我,我是一个糟糕的程序员......
我搜索了很多,并阅读了很多关于PCA的信息,包括许多微软网站 那些告诉我这样做:
我的清单看起来像这样:
<?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可执行文件是否必须包含其他一些内容?
答案 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操作系统加载程序管理包装的可执行代码所需的信息。
构建这些文件的过程非常顺利,但是当我们尝试在Win7上运行生成的文件时,我们会得到以下对话框。
这里最大的提示是PCA抛出了这个对话框 - 程序兼容性助手。由于PCA已检测到错误,因此抛出此错误:
在我们的案例中,似乎#2 导致了这个问题。所以我们下载了PE Tools并打开了7-zip SFX文件。 注意:我们加载了文件7zS.sfx
。
加载后,我们将以下版本信息从4
更改为6
。